Hợp ngữ và lập trình hệ thống - Chương 1: Ngôn ngữ assembler (asm) và cách lập trình

1. Ngôn ngữ ASM 2. Hệ lệnh ASM 3. Các lệnh điều khiển khi dịch chương trình ASM 4. Macro và Chương trình con

pdf95 trang | Chia sẻ: thuychi16 | Lượt xem: 864 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Hợp ngữ và lập trình hệ thống - Chương 1: Ngôn ngữ assembler (asm) và cách lập trình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LOGO HỢP NGỮ và LẬP TRÌNH HỆ THỐNG GV: Phạm Công Hòa Tel: 091.552.9889 Email: conghoaf1@gmail.com CHƯƠNG 1: NGÔN NGỮ ASSEMBLER (ASM) VÀ CÁCH LẬP TRÌNH 2 NỘI DUNG HỌC PHẦN I NGÔN NGỮ ASSEMBLER (ASM) VÀ CÁCH LẬP TRÌNH II LIÊN KẾT NGÔN NGỮ BẬC CAO VỚI ASM III LẬP TRÌNH HỆ THỐNG 3 I NGÔN NGỮ ASSEMBLER (ASM) VÀ CÁCH LẬP TRÌNH 1. Ngôn ngữ ASM 2. Hệ lệnh ASM 3. Các lệnh điều khiển khi dịch chương trình ASM 4. Macro và Chương trình con 4 1.1. Giới thiệu chung 1.2. Cài đặt chương trình dịch 1.3. Các bước thực hiện một chương trình ASM 1.4. Cấu trúc chung của một chương trình thuần túy ASM - Nội dung: 1. NGÔN NGỮ ASM 5 1. NGÔN NGỮ ASM 1.1. Giới thiệu chung - ASM là ngôn ngữ bậc thấp, gần ngôn ngữ máy. - Ưu điểm:  Tốc độ nhanh.  Tiết kiệm vùng nhớ. - Nhược điểm:  Khó viết vì phải am hiểu phần cứng.  Khó sửa lỗi (lỗi cú pháp và lỗi thuật toán).. - Ứng dụng:  Biết lõi của hệ điều hành.  Viết chương trình đo và điều khiển trong công nghiệp  Viết chương trình virus 6 1. NGÔN NGỮ ASM 1.2. Cài đặt chương trình dịch - Sử dụng MASM (Microsoft) hoặc TASM (Borland). Với TASM, có thể copy nguyên CD bản quyền hoặc copy 4 tệp chính: Tasm.exe Tlink.exe DpmiLoad.exe DpmiMem.dll - Sử dụng EMU8086 7 1. NGÔN NGỮ ASM 1.3. Các bước thực hiện một chương trình ASM - Gồm 4 bước (Với TASM):  Bước 1: Dùng chương trình sọan thảo bất kỳ (NC, EDIT, TC, NOTEPAD,) để viết các lệnh chương trình, lưu vào tệp tin có đuôi “.asm”.  Bước 2: Dịch tệp “.asm” sang “.obj”. Nếu dịch thành công ta sẽ thấy xuất hiện tệp “.obj”, ngược lại thấy thông báo lỗi dạng: **Error**  Bước 3: Dịch tệp “.obj” sang “.exe”.  Bước 4: Chạy chương trình (Gọi thi hành tệp “.exe”). 8 1. NGÔN NGỮ ASM 1.4. Cấu trúc chung của một chương trình thuần túy ASM [Phần khai báo MACRO, STRUC, RECORD và UNION] (nếu có) .MODEL .STACK .DATA ;Khai báo biến .CODE Nhãn: ;Thân chương trình [Các chương trình con] (nếu có) END Nhãn - Cấu trúc chương trình ASM dạng đơn giản: 9 1. NGÔN NGỮ ASM .MODEL small .STACK 100h .DATA s1 DB 'Hello world!$‟ .CODE Main: Mov ax, @data Mov ds, ax Lea dx, s1 Mov ah,9 Int 21h Mov ah,4ch Int 21h End Main - Ví dụ một chương trình ASM đơn giản: Hiện xâu ký tự “Hello world!” ra màn hình. 10 I NGÔN NGỮ ASSEMBLER (ASM) VÀ CÁCH LẬP TRÌNH 1. Ngôn ngữ ASM 2. Hệ lệnh ASM 3. Các lệnh điều khiển khi dịch chương trình ASM 4. Macro và Chương trình con 5. Chương trình ASM dạng COM 11 2.1. Hỗ trợ của hệ thống cho lập trình ASM 2.2. Cú pháp 1 dòng lệnh trong ASM 2.3. Hệ thống lệnh ASM - Nội dung: 2. HỆ LỆNH ASSEMBLER 12 2.1. Hỗ trợ của hệ thống cho lập trình ASM 2.1.1. Thanh ghi (Registers) 2. HỆ LỆNH ASSEMBLER CPU 13 2.1. Hỗ trợ của hệ thống cho lập trình ASM Thanh ghi (Registers) - Thanh ghi là vùng nhớ đặc biệt (dạng RAM) nằm ở CPU 2. HỆ LỆNH ASSEMBLER 14  Phân loại thanh ghi: • Nhóm 1: Gồm 1 thanh ghi cờ 16 bít. Người lập trình ASM hay lấy trạng thái các bit cờ làm điều kiện cho các lệnh nhảy (cờ CF). • Nhóm 2: Gồm 8 thanh ghi đa năng 16 bit: AX (Accumulator register) 3 mode truy nhập: AH, AL, AX BX (Base register) CX (Counter regigter) DX (Data regigter) SI 1 mode truy nhập DI BP SP *Người lập trình chỉ được phép dùng 7 thanh ghi đầu để thay cho biến. 2. HỆ LỆNH ASSEMBLER 15  Phân loại thanh ghi (tiếp): • Nhóm 3: Gồm 1 thanh ghi 16 bit con trỏ lệnh: IP • Nhóm 4: Gồm 4 thanh ghi segment 16 bit: CS, DS, ES, SS 2. HỆ LỆNH ASSEMBLER 16 • AX, thanh ghi tích luỹ (Accumulatior Register): đây là thanh ghi chính để thực hiện các phép toán số học, các lệnh xuất nhập cổng. Ngoài ra nó cũng được dùng trong một số lệnh xử lý chuỗi. • BX, thanh ghi cơ sở (Base Register): Dùng để chỉ đến vị trí của một ô nhớ trong một đoạn. Thường thanh ghi BX được dùng trong phép định địa chỉ cơ sở khi truy xuất các dữ liệu trong bộ nhớ. • CX, thanh ghi đếm (Count Register): thường dùng để định số lần lặp lại trong một lệnh. • DX, thanh ghi dữ liệu (Data Register): thường dùng để ghi kết quả của các phép toán nhân và chia, định địa cổng trong các phép xuất nhập cổng. 2. HỆ LỆNH ASSEMBLER Một số ý nghĩa chung của các thanh ghi: 17 • Cờ nhớ CF (Carry Flag): Phép toán có/không mượn. • Cờ phụ AF (Auxiliary Carry Flag): Phép toán có/không mượn đối với 4 bit thấp. • Cờ Zero ZF (Zero Flag): Phép toán có/không bằng 0. • Cờ dấu SF (Sign Flag): Có giá trị tương ứng với bít cao nhất của kết quả phép toán vừa được thực hiện. • Cờ chẵn lẻ PF (Parity Flag): Tổng 8 bít thấp là số chẵn/lẻ. • Cờ tràn OF (Overflow Flag): kết quả phép toán các số có dấu bị sai. 2. HỆ LỆNH ASSEMBLER 18 2.1.2. Cách thể hiện địa chỉ của một ô nhớ. Địa chỉ 1 ô nhớ = Segment : Offset (1 segment = 64K) - Giải thích: Phần Segment cho biết ô nhớ đó nằm ở Segment nào, phần Offset cho biết vị trí từ đầu segment đến ô nhớ đó. - Ví dụ: Địa chỉ ô nhớ (4:12) cho ta biết ô nhớ nằm ở vị trí thứ 12 của segment 4. • Dạng Logic: Địa chỉ 1 ô nhớ = Segment * 16 + Offset • Dạng vật lý: 2. HỆ LỆNH ASSEMBLER 19 2.1.3. Một số hàm thường dùng của hệ thống hỗ trợ lập trình ASM • Hàm số 1: Chờ nhận 1 ký tự từ bàn phím. Mov ah,1 Int 21h Kết quả: phần AL của thanh ghi AX sẽ nhận mã ASCII của bàn phím. Ví dụ: Khi người dùng bấm ký tự „A‟, giá trị thanh ghi AL sẽ là: 0 1 0 0 0 0 0 1 2. HỆ LỆNH ASSEMBLER 20 • Hàm số 2: Hiện 1 ký tự ra màn hình tại vị trí con trỏ. Mov al, Mã_ASCII_của_ký_tự Mov ah, 0eh Int 10h Mov al, Mã_ASCII_của_ký_tự Mov ah, 2 Int 21h - Cách 1: - Cách 2: 2. HỆ LỆNH ASSEMBLER 21 • Hàm số 3: Hiện 1 xâu ký tự (kết thúc bằng dấu $ ra màn hình) Lea dx, tên_biến_xâu Mov ah,9 Int 21h • Hàm số 4: Kết thúc chưong trình ASM, trở về DOS Mov ah,4ch Int 21h 2. HỆ LỆNH ASSEMBLER 22 2.2. Cú pháp 1 dòng lệnh trong ASM - Trong ngôn ngữ ASM mỗi lệnh được viết trên 1 dòng với cú pháp như sau (không phân biệt chữ hoa/thường): [Nhãn:] [Tên lệnh] [toán hạng] [;Chú thích] - Các lệnh trong ngôn ngữ ASM thường được viết tắt bởi các từ tiếng Anh như: Add Addition Mul Multiplication Mov Move 2. HỆ LỆNH ASSEMBLER 23 - Một số quy ước về các toán hạng: Toán hạng nguồn SRC (Source) Toán hạng đích DST (Destination) Thanh ghi REG (Register) Biến nhớ Mem (Memory) Hằng số dữ liệu Data Thanh ghi Segment SegReg (Segment Register) 2. HỆ LỆNH ASSEMBLER 24 2.3. Hệ thống lệnh ASM  Các lệnh di chuyển dữ liệu. - Phân loại lệnh:  Nhóm lệnh số học.  Nhóm lệnh thao tác bit.  Nhóm lệnh làm việc với xâu ký tự.  Nhóm lệnh rẽ nhánh.  Nhóm lệnh làm việc với các bit cờ. 2. HỆ LỆNH ASSEMBLER 25 2.3.1. Các lệnh di chuyển dữ liệu.  Lệnh 1: MOV - Chức năng: Đưa giá trị toán hạng nguồn SRC vào toán hạng đích DST. - Cú pháp: MOV DST, SRC - Chú ý: + Các toán hạng DST và SRC có thể chuyển nhận giá trị theo các dạng: DST SRC Ví dụ Reg1 Reg2 Mov ax, bx Reg Mem Mov ax, value Reg Data Mov ax, 123 Mem Reg Mov value, bx Mem Data Mov value, 50 SegReg Reg16 Mov ds, ax Reg16 SegReg Mov ax, es SegReg Mem Mov ds, value 2. HỆ LỆNH ASSEMBLER 26  Lệnh 1: MOV (tiếp) Nếu muốn chuyển giá trị từ mem1 sang mem2 ta phải chuyển gián tiếp theo cách: Mov reg, mem1 Mov mem2, reg 2. HỆ LỆNH ASSEMBLER 27  Lệnh 2: PUSH - Cú pháp: PUSH DST - Chức năng: Đưa 2 byte của DST vào đỉnh STACK  Lệnh 3: POP - Cú pháp: POP DST - Chức năng: Lấy 2 byte của đỉnh STACK và đưa vào DST 2. HỆ LỆNH ASSEMBLER 28 (Sau lệnh Pop AX, trong stack chỉ còn chứa giá trị 158) 2. HỆ LỆNH ASSEMBLER 29  Lệnh 4: XCHG - Cú pháp: XCHG DST, SRC - Chức năng: Hoán đổi nội dung giá trị của 2 toán hạng. - Chú ý: DST và SRC có thể là : Reg1, Reg2 Reg, Mem 2. HỆ LỆNH ASSEMBLER 30  Lệnh 5: IN - Cú pháp: IN AL/AX, Địa_chỉ_cổng - Chức năng: Đọc địa chỉ cổng dữ liệu 8/16 bit. - Chú ý: Nếu địa chỉ cổng <256 thì địa chỉ đó có thể dùng trực tiếp trong lệnh IN. - Ví dụ: Cổng COM1 của máy tính có địa chỉ 3f8h, muốn đọc nội dung từ cổng COM1 ta phải thực hiện: Mov dx, 3f8h In al, dx 2. HỆ LỆNH ASSEMBLER 31  Lệnh 6: OUT - Cú pháp: OUT Địa_chỉ_cổng, AL/AX - Chức năng: Đưa địa chỉ có trong thanh ghi AL/AX ra một cổng 8/16 bit. - Chú ý: Về địa chỉ cổng giống với lệnh IN 2. HỆ LỆNH ASSEMBLER 32  Lệnh 7: LEA - Cú pháp: LEA Reg, Value - Chức năng: Lấy địa chỉ offset của biến đưa vào thanh ghi Reg.  Lệnh 8: LDS - Cú pháp: LDS Reg16, Mem - Chức năng: Đưa 2 byte của biến nhớ vào thanh ghi 16 và nội dung 2 byte tiếp theo đưa vào DS.  Lệnh 9: LES - Cú pháp: LES Reg16, Mem - Chức năng: Giống lệnh LDS chỉ khác DS được thay thế bằng ES. 2. HỆ LỆNH ASSEMBLER 33 2.3.2. Nhóm lệnh số học. - Nhóm lệnh thực hiện các phép toán số học: +,-,*,/, - Chú ý: Hầu hết các lệnh của nhóm này khi thực hiện có thể làm thay đổi các bit cờ. 2. HỆ LỆNH ASSEMBLER 34 - Cú pháp: ADD DST, SRC - Chức năng: Cộng giá trị 2 toán hạng. Kết quả của phép cộng sẽ nằm ở DST.  Lệnh 1: ADD - Chú ý: DST SRC Ví dụ Reg1 Reg2 Add ax, bx Reg Data Add cx, 200 Reg Mem Add ax, value Mem Reg Add value, dx Mem Data Add value, 300 (Bảng*) + Các cờ bị tác động: C, P, A, Z, S, O + Các toán hạng sử dụng trong hàm có thể là: 2. HỆ LỆNH ASSEMBLER 35 - Cú pháp: ADC DST, SRC - Chức năng: Cộng giá trị 2 toán hạng và giá trị cờ.  Lệnh 2: ADC - Chú ý: + (Bảng*) + Các cờ bị tác động: C, P, A, Z, S, O 2. HỆ LỆNH ASSEMBLER 36 - Cú pháp: INC DST - Chức năng: Tăng giá trị của toán hạng DST lên 1  Lệnh 3: INC - Chú ý: + Toán hạng có thể là thanh ghi (Reg) hoặc biến nhớ (mem) + Các cờ bị tác động: C, P, A, Z, S, O 2. HỆ LỆNH ASSEMBLER 37 - Cú pháp: SUB DST, SRC - Chức năng: Phép trừ DTS – SRC (DST  DST – SRC)  Lệnh 4: SUB - Chú ý: + Các cờ bị tác động: C, P, A, Z, S, O + (Bảng*) 2. HỆ LỆNH ASSEMBLER 38 - Cú pháp: DEC DST - Chức năng: Trừ giá trị toán hạng DST đi 1  Lệnh 5: DEC - Chú ý: + Các cờ bị tác động: C, P, A, Z, S, O + Toán hạng có thể là thanh ghi (Reg) hoặc biến nhớ (Mem). 2. HỆ LỆNH ASSEMBLER 39 - Cú pháp: NEG DST - Chức năng: Đổi dấu giá trị của toán hạng.  Lệnh 6: NEG - Chú ý: + Các cờ bị tác động: C, P, A, Z, S, O + Toán hạng có thể là thanh ghi (Reg) hoặc biến nhớ (Mem). 2. HỆ LỆNH ASSEMBLER 40 - Cú pháp: CMP DST, SRC - Chức năng: So sánh nội dung 2 toán hạng và dựng cờ.  Lệnh 7: CMP - Chú ý: + Các cờ bị tác động: C, P, A, Z, S, O + Kết quả: Nếu DST<SRC thì cờ C = 1 Nếu DST>=SRC thì cờ C = 0 Nếu DST=SRC thì cờ Z = 1 Nếu DSTSRC thì cờ Z = 0 + (Bảng*) 2. HỆ LỆNH ASSEMBLER 41 - Cú pháp: MUL|IMUL SRC - Chức năng: Thực hiện phép nhân không dấu | phép nhân có dấu.  Lệnh 8: MUL|IMUL - Chú ý: + Nếu toán hạng nguồn SRC là 8 bit thì kết quả là AX (AX=AL*SRC) + Toán hạng nguồn có thể là Reg hoặc Mem. + Phải xóa giá trị nằm trong DX trước khi thực hiện phép nhân. + Nếu toán hạng nguồn SRC là 16 bit thì kết quả là DX:AX (DX:AX=AX*SRC) 2. HỆ LỆNH ASSEMBLER 42 - Cú pháp: DIV|IDIV SRC - Chức năng: Thực hiện phép chia giữa 2 toán hạng (không dấu|có dấu).  Lệnh 9: DIV|IDIV - Chú ý: + Chia số 16 bit (nằm trong AX) cho số 8 bit, ta được kết quả: AL: thương số; AH: số dư + Chia số 32 bit (nằm trong DX:AX) cho số 16 bit, ta được kết quả: AX: thương số; DX: số dư + Phải xóa giá trị nằm trong DX trước khi thực hiện phép chia. 2. HỆ LỆNH ASSEMBLER 43 2.3.3. Nhóm lệnh thao tác bit. - Nhóm lệnh thực hiện các phép toán dịch chuyển bit, đảo bit, so sánh các bit,. - Chú ý: Hầu hết các lệnh của nhóm này khi thực hiện có thể làm thay đổi các bit cờ. 2. HỆ LỆNH ASSEMBLER 44 - Cú pháp: AND DST, SRC - Chức năng: Thực hiện phép “và” logic. Bit của kết quả = 1 khi 2 bit tương ứng của 2 toán hạng đều bằng 1.  Lệnh 1: AND - Chú ý: + Các cờ bị tác động: P, Z, S - Ví dụ: al = 0101 1010 bl = 1001 0110 AND al,bl cho kết quả: 0001 0010 + (Bảng*) 2. HỆ LỆNH ASSEMBLER 45 - Cú pháp: OR DST, SRC - Chức năng: Thực hiện phép “hoặc” logic. Bit của kết quả = 1 khi chỉ cần 1 trong 2 bit tương ứng của 2 toán hạng bằng 1.  Lệnh 2: OR - Chú ý: + Các cờ bị tác động: P, Z, S - Ví dụ: al = 1010 0110 bl = 0101 0110 OR al,bl cho kết quả: 1111 0110 + (Bảng*) 2. HỆ LỆNH ASSEMBLER 46 - Cú pháp: XOR DST, SRC - Chức năng: Thực hiện phép toán OR có loại trừ. Bit của kết quả = 1 khi 2 bit tương ứng của 2 toán hạng có giá trị khác nhau.  Lệnh 3: XOR - Chú ý: + Các cờ bị tác động: P, Z, S - Ví dụ: al = 1010 0110 bl = 0101 0110 XOR al,bl cho kết quả: kq= 1111 0000 + (Bảng*) 2. HỆ LỆNH ASSEMBLER 47  Ví dụ: Thực hiện gán giá trị của thanh ghi AX bằng 0 - Cách 1: mov ax, 0 - Cách 2: sub ax, ax - Cách 3: and ax, 0 - Cách 4: xor ax, ax 2. HỆ LỆNH ASSEMBLER 48 - Cú pháp: SHL DST, count - Chức năng: Dịch trái toán hạng count bit.  Lệnh 4: SHL (Shift Left) + Các cờ bị tác động: C, P, Z, S, O + Dịch trái 1 bit: Bit đầu tiên (bên trái) được chuyển vào cờ C + Dịch count bit: Bit thứ count được chuyển vào cờ C (bit đầu tiên bên phải sẽ được gán = 0) + Nếu count=1 thì ta có thể đặt số 1 trực tiếp trong lệnh, nếu count >1 thì ta phải sử dụng đến thanh ghi CL làm trung gian: Mov cl, 4 SHL ax, cl - Chú ý: 2. HỆ LỆNH ASSEMBLER 49 2. HỆ LỆNH ASSEMBLER 50 - Cú pháp: SHR DST, count - Chức năng: Dịch phải toán hạng count bit.  Lệnh 5: SHR (Shift Right) + Nếu count=1 thì ta có thể đặt số 1 trực tiếp trong lệnh, nếu count >1 thì ta phải sử dụng đến thanh ghi CL làm trung gian: Mov cl, 4 SHR ax, cl - Chú ý: 2. HỆ LỆNH ASSEMBLER + Các cờ bị tác động: C, P, Z, S, O + Dịch phải 1 bit: Bit đầu tiên (bên phải) được chuyển vào cờ C + Dịch count bit: Bit thứ count được chuyển vào cờ C 51 - Cú pháp: SAR DST, count - Chức năng: Mỗi lần dịch = Chia đôi giá trị toán hạng đích DST làm tròn dưới.  Lệnh 6: SAR (Shift Arithmetic Right ) + Các cờ bị tác động: C, P, Z, S, O + Giống với lệnh SHR - Chú ý: -Ví dụ: dịch 1 lần: 1000 1010 -> 0100 0101 2. HỆ LỆNH ASSEMBLER 52 - Cú pháp: ROL DST, count - Chức năng: Dịch các bit của toán hạng đích DST sang trái theo vòng tròn.  Lệnh 7: ROL (Rotate Left) + Các cờ bị tác động: C, P, Z, S, O + Giống với lệnh SHR - Chú ý: -Ví dụ: dịch 1 lần: 1000 1010 -> 0001 0101 2. HỆ LỆNH ASSEMBLER 53 2. HỆ LỆNH ASSEMBLER 54 - Cú pháp: ROR DST, count - Chức năng: Dịch các bit của toán hạng đích DST sang phải theo vòng tròn.  Lệnh 8: ROR (Rotate Right) + Các cờ bị tác động: C, P, Z, S, O + Giống với lệnh SHR - Chú ý: -Ví dụ: dịch 1 lần: 1000 1010 -> 0001 0101 2. HỆ LỆNH ASSEMBLER 55 2.3.4. Nhóm lệnh làm việc với xâu ký tự.  Lệnh 1: MOVSB|MOVSW - Cú pháp: MOVSB/MOVSW - Chức năng: Chuyển các ký tự xâu theo từng byte (hoặc từng Word) từ vùng nhớ trỏ bởi DS:SI đến vùng nhớ trỏ bởi ES:DI  Lệnh 2: LODSB|LODSW - Cú pháp: LODSB/LODSW - Chức năng: Chuyển các ký tự xâu theo từng byte (hoặc từng Word) từ vùng nhớ trỏ bởi DS:SI đến vùng nhớ trỏ bởi AL/AX 2. HỆ LỆNH ASSEMBLER 56  Lệnh 3: STOSB|STOSW - Cú pháp: STOSB/STOSW - Chức năng: Chuyển các ký tự xâu theo từng byte (hoặc từng Word) từ vùng nhớ trỏ bởi AL/AX đến vùng nhớ trỏ bởi DS:DI  Lệnh 4: CMPSB|CMPSW - Cú pháp: CMPSB/CMPSW - Chức năng: So sánh các ký tự của 2 xâu theo từng byte giữa 2 vùng nhớ DS:SI và ES:DI. 2. HỆ LỆNH ASSEMBLER 57 2.3.5. Nhóm lệnh rẽ nhánh  Lệnh 1: CALL - Cú pháp: CALL Tên_CTCon - Chức năng: Gọi thực hiện chương trình con (có tên Tên_CTCon )  Lệnh 2: RET - Cú pháp: RET - Chức năng: Từ chương trình con quay về đoạn chương trình đã gọi nó. 2. HỆ LỆNH ASSEMBLER 58  Lệnh 3: INT - Cú pháp: INT n - Chức năng: Gọi một chương trình con phục vụ ngắt của hệ thống.  Lệnh 4: IRET - Cú pháp: IRET - Chức năng: Trở về đoạn chương trình đã kích hoặt nó từ chương trình con phục vụ ngắt. - Chú ý: n là số ngắt - Ví dụ: int 21h 2. HỆ LỆNH ASSEMBLER 59  Lệnh 5: JMP (jump) - Cú pháp: JMP nhãn (hoặc địa chỉ Seg:Offset) - Chức năng: Nhảy không điều kiện tới 1 nhãn. - Chú ý: Bước nhảy của lệnh JMP<=64K 2. HỆ LỆNH ASSEMBLER 60  Lệnh 6: Tập các lệnh nhảy có điều kiện - Cú pháp: Cmp DST,SRC Tên_lệnh nhãn - Bao gồm các lệnh: Tên_lệnh Ý nghĩa JB Jump below Nhảy nếu DST nhỏ hơn SRC Jnae Jump not above and equal Nhảy nếu không lơn hơn hay bằng Jbe/Jna Je Jne Ja Jae 2. HỆ LỆNH ASSEMBLER 61  Lệnh 6: Tập các lệnh nhảy có điều kiện (tiếp) - Với số có dấu: Tên_lệnh Ý nghĩa Jl Jump less Nhảy nếu DST nhỏ hơn SRC Jle Jg Jump greater Nhảy nếu DST lớn hơn SRC 2. HỆ LỆNH ASSEMBLER 62  Lệnh 7: Lệnh nhảy theo trạng thái bit cờ. - Cú pháp: JC Nhãn Nếu cờ C=1 thì nhảy tới Nhãn JNC Nhãn Nếu cờ C=0 thì nhảy tới Nhãn - Chú ý: Tương tự với các lệnh JZ, JNZ, JS, JNS 2. HỆ LỆNH ASSEMBLER 63  Lệnh 8: LOOP - Chú ý: Thực hiện lặp các công việc nằm giữa Nhãn và LOOP cho đến khi giá trị của CX=0, sau mỗi lần lặp CX tự động giảm đi 1. Cú pháp: Mov cx, số_lần_lặp Nhãn: ;Khối lệnh ASM LOOP Nhãn 2. HỆ LỆNH ASSEMBLER 64 2.3.6. Nhóm lệnh làm việc với các bit cờ.  Lệnh 1: CLC (Clear Carry) - Cú pháp: CLC - Chức năng: Gán giá trị cờ C = 0  Lệnh 2: STC (Set Carry) - Cú pháp: STC - Chức năng: Gán giá trị cờ C = 1 2. HỆ LỆNH ASSEMBLER 65 2. HỆ LỆNH ASSEMBLER  Lệnh 3: CMC - Cú pháp: CMC - Chức năng: Đảo bit cờ C  Lệnh 4: CLI (Clear Interrupt flag) - Cú pháp: CLI - Chức năng: Gán cờ I = 0 (cấm ngắt cứng – trừ ngắt không che).  Lệnh 5: STI (Set Interrupt flag) - Cú pháp: STI - Chức năng: Gán cờ I = 1 (cho phép ngắt với ngắt cứng). 66 NỘI DUNG HỌC PHẦN I NGÔN NGỮ ASSEMBLER (ASM) VÀ CÁCH LẬP TRÌNH 1. Ngôn ngữ ASM 2. Hệ lệnh ASM 3. Các lệnh điều khiển khi dịch chương trình ASM 4. Macro và Chương trình con 5. Chương trình ASM dạng COM 67 3. CÁC LỆNH ĐIỀU KHIỂN KHI DỊCH CHƯƠNG TRÌNH Các lệnh điều khiển Segment đơn giản - Bao gồm: .MODEL .STACK .DATA .CODE 68 3. CÁC LỆNH ĐIỀU KHIỂN KHI DỊCH CHƯƠNG TRÌNH - Chức năng: Báo cho chương trình dịch của ASM biết để xác lập một vùng nhớ RAM thích hợp cho chương trình. 3.1. Lệnh điều khiển .MODEL - Cú pháp: .MODEL Kiểu Ý nghĩa Tiny Vùng nhớ dành cho CODE+DATA<=64Kb Small CODE<=64Kb; DATA<=64Kb Compact CODE=64Kb Medium CODE>=64Kb; DATA<=64Kb Large CODE>=64Kb; DATA>=64Kb nhưng 1 mảng <=64Kb Huge CODE>=64Kb; DATA>=64Kb - Trong đó nhận các giá trị sau: 69 3. CÁC LỆNH ĐIỀU KHIỂN KHI DỊCH CHƯƠNG TRÌNH - Chức năng: Báo cho chương trình dịch ASM biết để xác lập một vùng nhớ RAM cho stack. 3.2. Lệnh điều khiển .STACK - Cú pháp: .STACK - Trong đó tính theo byte - Ví dụ: .STACK 100h ; 100h=256 byte 70 3. CÁC LỆNH ĐIỀU KHIỂN KHI DỊCH CHƯƠNG TRÌNH - Chức năng: Báo cho ASM biết để xác lập một vùng nhớ RAM dành cho dữ liệu (các biến trong chương trình). 3.3. Lệnh điều khiển .DATA - Cú pháp: .DATA ;Khai báo biến (biến số, biến xâu, biến trường số) 71 3. CÁC LỆNH ĐIỀU KHIỂN KHI DỊCH CHƯƠNG TRÌNH a) Khai báo biến số: 3.4. Lệnh điều khiển .DATA (tiếp) - Trong đó có thể là: db (1 byte) dw (2 byte) dd (4 byte) dp (6 byte) dq (8 byte) dt (10 byte) - Giá trị ban đầu có thể là một hằng hoặc „?‟ nếu chưa muốn gán. - Ví dụ: .DATA X db 15 Y dw ? 72 3. CÁC LỆNH ĐIỀU KHIỂN KHI DỊCH CHƯƠNG TRÌNH b) Khai báo biến xâu: 3.4. Lệnh điều khiển .DATA (tiếp) - Dạng 1: db Ví dụ: strName DB „HA$‟ - Dạng 2: db Ví dụ: strName1 DB 100h dup(„A‟) strName2 DB 100h dup(?)  Chú ý: Nếu trong chương trình
Tài liệu liên quan