YOMEDIA
ADSENSE
LẬP TRÌNH HỢP NGỮ AVR
82
lượt xem 12
download
lượt xem 12
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Assembler làm việc trên các file nguồn chứa đựng các lệnh gợi nhớ (mnemonic), các nhãn (label) và các chỉ thị (directive). Lệnh gợi nhớ và chỉ thị thường kèm theo các toán hạng (operand).
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: LẬP TRÌNH HỢP NGỮ AVR
- HOC VIÊN CÔNG NGHỆ BƯU CHINH VIÊN THÔNG ̣ ̣ ́ ̃ LÂP TRINH HỢP NGỮ ̣ ̀ AVR ̉ GIANG VIÊN: THS. PHAM THẾ DUY ̣ ̣ ̣ ĐIÊN THOAI/EMAIL: 0903661501 DUYPT@PTITHCM.EDU.VN BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣ ̣ ̀ ̣ HOC KY/NĂM BIÊN SOAN: 02/2010
- ̣ Nôi dung 6.1 GIỚI THIỆU TẬP LỆNH AVR 6.2 CẤU TRÚC LỆNH HỢP NGỮ 6.3 HƯỚNG DẪN GIAO DiỆN CODEVISONAVR www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 2 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.1 GIỚI THIỆU TẬP LỆNH AVR Ký hiệu các toán hạng (operand) Rd : Các thanh ghi R0 – R31 hoặc R16 – R31 (tuỳ thuộc lệnh). Rr : Các thanh ghi R0 – R31. b : Hằng số ( 0 – 7), có thể là biểu thức hằng. s : Hằng số ( 0 – 7), có thể là biểu thức hằng. P : Hằng số ( 0 – 31/63), có thể là biểu thức hằng. K : Hằng số ( 0 – 63), có thể là biểu thức hằng. k : Hằng số (dải giá trị tuỳ thuộc lệnh), có thể là biểu thức hằng. q : Hằng số ( 0 – 63), có thể là biểu thức hằng. www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 3 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- CAC LÊNH SỐ HOC VÀ LOGIC ́ ̣ ̣ Gợi nhớ Toán hạng Mô tả Thực hiện Cờ Clock • ADD Rd, Rr Cộng không nhớ Rd ←Rd + Rr Z,C,N,V,H 1 • ADC Rd, Rr Cộng có nhớ Rd ← Rd + Rr + C Z,C,N,V,H 1 • ADIW Rd, K + giá trị tức thời Rd+1:Rd ← Rd+1:Rd + K Z,C,N,V 2 • SUB Rd, Rr Trừ không nhớ Rd ← Rd - Rr Z,C,N,V,H 1 • SUBI Rd, K Trừ giá trị tức thời Rd ← Rd - K Z,C,N,V,H 1 • SBC Rd, Rr Trừ có cờ nhớ Rd ← Rd - Rr - C Z,C,N,V,H 1 • SBCI Rd, K Trừ tức thời có nhớ Rd ← Rd - K - C Z,C,N,V,H 1 • SBIW Rd, K - tức thời theo từ Rd+1:Rd ← Rd+1:Rd – K Z,C,N,V 2 • AND Rd, Rr Logic AND Rd ← Rd AND Rr Z,N,V 1 • ANDI Rd, K AND với số tức thời Rd ← Rd AND K Z,N,V 1 • OR Rd, Rr Logical OR Rd ← Rd OR Rr Z,N,V 1 • ORI Rd, K OR với số tức thời Rd ← Rd OR K Z,N,V 1 • EOR Rd, Rr Exclusive OR Rd ← Rd XOR Rr Z,N,V 1 • COM Rd Bù 1 Rd ← $FF - Rd Z,C,N,V 1 • NEG Rd Bù 2 Rd ← $00 - Rd Z,C,N,V,H 1 • SBR Rd,K Lập bit trong t. ghi Rd ← Rd v K Z,N,V 1 • CBR Rd,K Xóa bit trong t. ghi Rd ← Rd and ($FFh - K) Z,N,V 1 • INC Rd Tăng Rd ← Rd + 1 Z,N,V 1 • DEC Rd Giảm Rd ← Rd - 1 Z,N,V 1 • TST Rd K.tra zero hoặc âm Rd ← Rd and Rd Z,N,V 1 • CLR Rd Xóa thanh ghi Rd ← Rd xor Rd Z,N,V 1 • SER Rd Lập thanh ghi Rd ← $FF None 1 • MUL Rd,Rr Nhân không dấu R1, R0 ← Rd x Rr C 2 www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 4 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- CAC LÊNH RẼ NHANH ́ ̣ ́ • RJMP k Nhảy tương đối PC ← PC + k + 1 None 2 • IJMP nhảy gián tiếp (Z) PC ← Z None 2 • JMP k Nhảy không điều kiện PC ← k None 3 • RCALL k Gọi c.trình con t. đối PC ← PC + k + 1 None 3 • ICALL Gọi gián tiếp (Z) PC ← Z None 3 • CALL k Gọi chương trình con PC ← k None 4 • RET Quay về từ c.trình con PC ← STACK None 4 • RETI Quay về từ ngắt PC ← STACK I 4 • CPSE Rd,Rr So sánh và 0 nhảy khi bằng if (Rd = Rr) PC ← PC + 2 or 3 None 1 / 2 / 3 • CP Rd,Rr So sánh Rd - Rr Z,C,N,V,H 1 • CPC Rd,Rr So sánh có cờ nhớ Rd - Rr - C Z,C,N,V,H 1 • CPI Rd,K So sánh với số tức thời Rd - K Z,C,N,V,H 1 • SBRC Rr, b 0 nhảy khi bit = 0 (Skip) if (Rr(b)=0) PC ← PC + 2or3 None 1 / 2 / 3 • SBRS Rr, b 0 nhảy nếu bit = 1 if (Rr(b)=1) PC ← PC + 2or3 None 1 / 2 / 3 • SBIC P, b 0 nhảy nếu bit I/O = 0 if(I/O(P,b)=0) PC←PC+2or3 None 1 / 2 / 3 • SBIS P, b 0 nhảy nếu bit I/O= 1 if(I/O(P,b)=1) PC ← PC+2or3 None 1 / 2 / 3 • BRBS s, k Rẽ nhánh khi cờ trạng thái=1 if (SREG(s) = 1)then PC←PC+k + 1 None 1 / 2 • BRBC s, k Rẽ nhánh khi cờ trạng thái=0 if (SREG(s) = 0) then PC←PC+k + 1 None 1 / 2 www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 5 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- CAC LÊNH RẼ NHANH ́ ̣ ́ • BREQ k Rẽ nhánh nếu bằng if (Z = 1) then PC← PC + k + 1 None 1/2 • BRNE k Rẽ nhánh nếu không bằng if (Z = 0) then PC← PC + k + 1 None 1/2 • BRCS k Rẽ nhánh nếu CF=1 if (C = 1) then PC← PC + k + 1 None 1/2 • BRCC k Rẽ nhánh nếu CF=0 if (C = 0) then PC← PC + k + 1 None 1/2 • BRSH k Rẽ nhánh nếu > hoặc = if (C = 0) then PC ← PC + k + 1 None 1/2 • BRLO k Rẽ nhánh nếu nhỏ hơn if (C = 1) then PC ← PC + k + 1 None 1/2 • BRMI k Rẽ nhánh nếu âm if (N = 1) then PC ← PC + k + 1 None 1/2 • BRPL k Rẽ nhánh nếu dương if (N = 0) then PC ← PC + k + 1 None 1/2 • BRGE k Rẽ nhánh > hoặc =, có d ấu if (NxorV= 0) then PC←PC+ k + 1 None 1/2 • BRLT k Rẽ nhánh < hoặc =, có d ấu if (NxorV= 1) then PC← PC + k + 1 None 1/2 • BRHS k Rẽ nhánh nếu HF = 1 if (H = 1) then PC ← PC + k + 1 None 1/2 • BRHC k Rẽ nhánh nếu HF = 0 if (H = 0) then PC ← PC + k + 1 None 1/2 • BRTS k Rẽ nhánh nếu TF = 1 if (T = 1) then PC ← PC + k + 1 None 1/2 • BRTC k Rẽ nhánh nếu TF = 0 if (T = 0) then PC ← PC + k + 1 None 1/2 • BRVS k Rẽ nhánh nếu OF = 1 if (V = 1) then PC ← PC + k + 1 None 1/2 • BRVC k Rẽ nhánh nếu OF = 0 if (V = 0) then PC ← PC + k + 1 None 1/2 • BRIE k Rẽ nhánh nếu IF = 1 if (I = 1) then PC ← PC + k + 1 None 1/2 • BRID k Rẽ nhánh nếu IF = 1 if (I = 0) then PC ← PC + k + 1 None 1/2 www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 6 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- CAC LÊNH TRUYÊN DỮ LIÊU ́ ̣ ̀ ̣ • MOV Rd, Rr Chép thanh ghi Rd ← Rr None 1 • LDI Rd, K Nạp giá trị tức thời Rd ← K None 1 • LDS Rd, k Nạp trực tiếp từ SRAM Rd ← (k) None 3 • LD Rd, X Nạp gián tiếp Rd ← (X) None 2 • LD Rd, X+ Nạp gián tiếp và tăng Rd ← (X), X ← X + 1 None 2 • LD Rd, -X Giảm và nạp gián tiếp X ← X - 1, Rd ← (X) None 2 • LD Rd, Y Nạp gián tiếp Rd ← (Y) None 2 • LD Rd, Y+ Nạp gián tiếp và tăng Rd ← (Y), Y ← Y + 1 None 2 • LD Rd, -Y Giảm và nạp gián tiếp Y← Y - 1, Rd ← (Y) None 2 • LDD Rd,Y+q Nạp gián tiếp với độ dời Rd ← (Y + q) None 2 • LD Rd, Z Nạp gián tiếp Rd ← (Z) None 2 • LD Rd, Z+ Nạp gián tiếp và giảm Rd ← (Z), Z ← Z+1 None 2 • LD Rd, -Z Giảm và nạp gián tiếp Z ← Z - 1, Rd ← (Z) None 2 • LDD Rd, Z+q Nạp gián tiếp với độ dời Rd ← (Z + q) None 2 • STS k, Rr Lưu trức tiếp vào SRAM (k) ← Rr None 3 • ST X, Rr Lưu gián tiếp (X) ← Rr None 2 www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 7 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- CAC LÊNH TRUYÊN DỮ LIÊU ́ ̣ ̀ ̣ • ST X+, Rr Lưu gián tiếp và giảm (X) ← Rr, X ← X + 1 None 2 • ST -X, Rr Giảm và lưu gián tiếp X ← X - 1, (X) ← Rr None 2 • ST Y, Rr Lưu gián tiếp (Y) ← Rr None 2 • ST Y+, Rr Lưu gián tiếp và tăng (Y) ← Rr, Y ← Y + 1 None 2 • ST -Y, Rr Giảm và lưu gián tiếp Y ← Y - 1, (Y) ← Rr None 2 • STD Y+q,Rr Lưu gián tiếp với độ dời (Y + q) ← Rr None 2 • ST Z, Rr Lưu gián tiếp (Z) ← Rr None 2 • ST Z+, Rr Lưu gián tiếp và tăng (Z)← Rr, Z ← Z + 1 None 2 • ST -Z, Rr Giảm và lưu gián tiếp Z ← Z - 1, (Z) ← Rr None 2 • STD Z+q,Rr Lưu gián tiếp với độ dời (Z + q)← Rr None 2 • LPM Nạp từ bộ nhớ chương trình R0 ← (Z) None 3 • IN Rd, P Đọc cổng vào ra Rd ← P None 1 • OUT P, Rr Ghi cổng vào ra P ← Rr None 1 • PUSH Rr Nạp thanh ghi vào đỉnh stack STACK ← Rr None 2 • POP Rd Lấy đỉnh stack ra thanh ghi Rd ← STACK None 2 www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 8 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- ́ ̣ ̉ CAC LÊNH KIÊM TRA BIT • LSL Rd Dịch trái logic Rd(n+1) ← Rd(n),Rd(0) ← 0,C ← Rd(7) Z,C,N,V,H 1 • LSR Rd Dịch phải logic Rd(n) ← Rd(n+1),Rd(7) ← 0,C ← Rd(0) Z,C,N,V 1 • ROL Rd Quay trái qua CF Rd(0) ← C,Rd(n+1) ← Rd(n),C ← Rd(7) Z,C,N,V,H 1 • ROR Rd Quay phải qua CF Rd(7) ← C,Rd(n) ← Rd(n+1),C ← Rd(0) Z,C,N,V 1 • ASR Rd Dịch phải số học Rd(n) ← Rd(n+1), n=0..6 Z,C,N,V 1 • SWAP Rd Chuyển đổi Nibbles Rd(3..0) Rd(7..4) None 1 • BSET s Lập cờ SREG(s) ← 1 SREG(s) 1 • BCLR s Xóa cờ SREG(s) ← 0 SREG(s) 1 • SBI P, b Lập bit I/O I/O(P, b) ← 1 None 2 • CBI P, b Clear Bit in I/O Register I/O(P, b) ← 0 None 2 • BST Rr, b Bit Store from Register to T T ← Rr(b) T 1 • BLD Rd, b Bit load from T to Register Rd(b) ← T None 1 • SEC Lập CF C ← 1 C 1 • CLC Xóa CF C ← 0 C 1 • SEN Lập NF N ← 1 N 1 • CLN Clear Negative Flag N ← 0 N 1 • SEZ Lập ZF Z ← 1 Z 1 • CLZ Xóa ZF Z ← 0 Z 1 www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 9 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- ́ ̣ ̉ CAC LÊNH KIÊM TRA BIT • SEI Cho phép ngắt tổng I←1 I 1 • CLI Cấm ngắt cổng I←0 I 1 • SES Lập cờ kiểm tra dấu S←1 S 1 • CLS Xóa cờ kiểm tra dấu S←0 S 1 • SEV Lập cờ tràn bù 2 V ← 1 V 1 • CLV Xóa cờ tràn bù 2 V ← 0 V 1 • SET Lập T trong SREG T←1 T 1 • CLT Xóa T trong SREG T←0 T 1 • SEH Lập cờ HF trong SREG H ←1 H 1 • CLH Xóa cờ HF trong SREG H←0 H 1 • NOP Không họat động None 1 • SLEEP Ngủ None 1 • WDR Watchdog Reset None 1 www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 10 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2 CẤU TRÚC LỆNH HỢP NGỮ 6.2.1 Các chỉ thị trong assembler 6.2.2 Cú pháp các chỉ thị của assembler 6.2.3 Các biểu thức trong assembler www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 11 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2.1 Các chỉ thị trong assembler HƯỚNG DẪN TRÌNH DỊCH HỢP NGỮ (ASSEMBLER) Assembler làm việc trên các file nguồn chứa đựng các lệnh gợi nh ớ (mnemonic), các nhãn (label) và các chỉ th ị (directive). L ệnh g ợi nh ớ và chỉ thị thường kèm theo các toán hạng (operand). Một dòng mã (code) không được hơn 120 ký tự. Một dòng nhập vào có thể ở 1 trong 4 dạng sau: 1. [Nhãn:] chỉ thị [các toán hạng] [ghi chú] 2. [Nhãn:] lệnh [các toán hạng] [ghi chú] 3. Ghi chú (comment) 4. Dòng trống rỗng Các ghi chú được bắt đầu bằng dấu “;” ở đầu dòng: www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 12 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2.1 Các chỉ thị trong assembler (tt) Ví dụ : đoạn chương trình nhỏ ; Doan chuong trinh vi du label: .EQU var1=100 ; Đặt var1 = 100 .EQU var2=200 ; Đặt var2 = 200 test: rjmp test ; Vòng lặp vô hạn www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 13 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2.1 Các chỉ thị trong assembler (tt) Giải thích các chỉ thị Chỉ thị Mô tả BYTE Đặt byte cho biến CSEG Đoạn mã lệnh DB Định nghĩa các byte hằng DEF Đặt tên ký hiệu cho thanh ghi DEVICE Chỉ định CPU sử dụng DSEG Đoạn dữ liệu DW Định nghĩa các từ (word) hằng ENDMACRO Kết thúc macro EQU Đặt một ký hiệu bằng một biểu thức ESEG Đoạn dữ liệu EEPROM EXIT Thoát từ tập tin www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 14 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2.1 Các chỉ thị trong assembler (tt) Chỉ thị Mô tả INCLUDE Đọc nguồn từ tập tin khác LIST Mở tập tin thống kê LISTMAC Mở tập tin thống kê của macro MACRO Bắt đầu chương trình macro NOLIST Tắt tập tin thống kê ORG Đặt địa chỉ ban đầu cho chương trình SEG Đặt ký hiệu cho một biểu thức www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 15 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2.2 Cú pháp các chỉ thị của assembler • Chỉ thị BYTE: • Cú pháp: Label: .BYTE biểuthức • Ví dụ: .DSEG var1: .BYTE 1 ; reserve 1 byte to var1 table: .BYTE tab_size ; reserve tab_size bytes .CSEG ldi r30, low(var1) ; Load Z register low ldi r31, high(var1) ; Load Z register high ld r1, Z ; Load VAR1 into register 1 www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 16 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2.2 Cú pháp các chỉ thị của assembler (tt) • Chỉ thị CSEG: • Cú pháp: .CSEG ; Lưu ý có dấu “.” ở đầu • Chỉ thị DB: để đặt trước bộ nhớ trong bộ nhớ chương trình hoặc bộ nhớ EEPROM. • Cú pháp: .DB biểuthức • Ví dụ: .CSEG consts: .DB 0, 255, 0b01010101, -128, 0xaa .ESEG eeconst: .DB 0xff www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 17 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2.2 Cú pháp các chỉ thị của assembler (tt) • Chỉ thị DEF: đặt ký hiệu cho các thanh ghi • Cú pháp: .DEF Symbol = Register • Ví dụ: .DEF temp = R16 .DEF ior = R0 .CSEG ldi temp, 0xf0 ; Load 0xf0 into temp register in ior, 0x3f ; Read SREG into ior register eor temp, ior ; Exclusive or temp and ior www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 18 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2.2 Cú pháp các chỉ thị của assembler (tt) • Chỉ thị DEVICE: Chỉ định CPU sử dụng • Cú pháp: .DEVICE TênCPU • Ví dụ: .DEVICE ATMEGA16 • Chỉ thị DSEG: Cho biết bắt đầu đoạn dữ liệu • Cú pháp: .DSEG • Ví dụ: .DSEG ; Start data segment var1: .BYTE 1 ; reserve 1 byte to var1 table: .BYTE tab_size ; reserve tab_size bytes. www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 19 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
- 6.2.2 Cú pháp các chỉ thị của assembler (tt) • Chỉ thị DW: Định nghĩa các từ hằng trong bộ nhớ chương trình hoặc bộ nhớ EEPROM. • Cú pháp: Label: .DW biểuthức • Ví dụ: .CSEG varlist:.DW 0,0xffff,0b1001110001010101,-32768,65535 .ESEG eevar: .DW 0xffff www.ptit.edu.vn GIANG VIÊN: THS. PHAM THẾ DUY ̉ ̣ 20 KỸ THUÂT VI XỬ LÝ ̣ BỘ MÔN: ĐIÊU KHIÊN VÀ XỬ LÝ TIN HIÊU ̀ ̉ ́ ̣
ADSENSE
CÓ THỂ BẠN MUỐN DOWNLOAD
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn