phong_phieu

New Member

Download miễn phí Giáo trình vi xử lý - Lập trình hợp ngữ





™ Lệnh LEA reg16,mem16: (Load Effective Address) chuyển địa chỉoffset
của toán hạng bộnhớvào thanh ghi reg16.
Lệnh này sẽtương đương với MOV reg16, OFFSET mem16
™ Lệnh LDS reg16,mem32: (Load pointer using DS) chuyển nội dung bộ
nhớtoán hạng mem32 vào cặp thanh ghi DS:reg16.
Lệnh LDS AX,mem tương đương với:
MOV AX,mem
MOV BX,mem+2
MOV DS,BX
™ Lệnh LES reg16,mem32: (Load pointer using ES) giống nhưlệnh LDS
nhưng dùng cho thanh ghi ES



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

oán tử [ ].
VD: Cách viết [CS] là sai, ta phải viết CS:[BX]
Giáo trình vi xử lý Lập trình hợp ngữ
Phạm Hùng Kim Khánh Trang 49
¾ Toán tử TYPE:
TYPE bt
Trả về giá trị biểu thị dạng của biểu thức bt.
- Nếu bt là biến thì sẽ trả về 1 nếu biến có kiểu byte, 2 nếu biến có kiểu
word, 4 nếu biến có kiểu double word.
- Nếu bt là nhãn thì trả về 0FFFFh nếu bt là near và 0FFFEh nếu bt là far.
- Nếu bt là hằng thì trả về 0.
¾ Toán tử LENGTH:
LENGTH bt
Trả về số đơn vị bộ nhớ cấp cho biến bt
¾ Toán tử SIZE:
SIZE bt
Trả về tổng số các byte cung cấp cho biến bt
VD: A DD 100 DUP(?)
MOV AX,LENGTH A ; AX = 100
MOV AX,SIZE A ; AX = 400
™ Các toán tử thuộc tính:
¾ Toán tử PTR:
Loai PTR bt
Toán tử này cho phép thay đổi dạng của biểu thức bt.
- Nếu bt là biến hay toán hạng bộ nhớ thì Loai là byte, word hay dword.
- Nếu bt là nhãn thì Loai là near hay far.
VD: A DW 100 DUP(?)
B DD ?
MOV AH,BYTE PTR A ; Đưa byte đầu tiên trong mảng A
; vào thanh ghi AH
MOV AX,WORD PTR B ; Đưa 2 byte thấp trong biến B
; vào thanh ghi AX
¾ Toán tử HIGH, LOW:
HIGH bt
LOW bt
Cho giá trị của byte cao và thấp của biểu thức bt, bt phải là một hằng.
Giáo trình vi xử lý Lập trình hợp ngữ
Phạm Hùng Kim Khánh Trang 50
VD: A EQU 1234h
MOV AH,HIGH A ; AH ← 12h
MOV AH,LOW A ; AH ← 34h
5. Các cách định địa chỉ trong hợp ngữ
™ Toán hạng trực tiếp:
Toán hạng trực tiếp là một biểu thức hằng xác định. Các hằng số có thể ở
dạng thập phân (có dấu và không dấu), nhị phân, thập lục phân, các hằng số định
nghĩa bằng lệnh EQU, …
VD: MOV AH,10
MOV AH,1010b
MOV AH,0Ah
MOV AH,A12
MOV AX,OFFSET msg
MOV AX,SEG msg
™ Toán hạng thanh ghi:
Các thanh ghi có thể sử dụng trong phép định địa chỉ thanh ghi là AH, BH,
CH, DH, AL, BL, CL, DL, AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, ES, SS.
™ Toán hạng bộ nhớ:
¾ Trực tiếp:
Toán hạng này xác định dữ liệu lưu trong bộ nhớ tại một địa chỉ xác định khi
dịch, địa chỉ này là một biểu thức hằng (có thể kết hợp với toán tử chỉ số [ ] hay toán
tử +, -, :). Thanh ghi đoạn mặc định là thanh ghi DS nhưng ta có thể dùng toán tử :
để chỉ thanh ghi đoạn khác.
VD: A DW 1000h
B DB 100 DUP(0)
MOV AX,A ; Chuyển nội dung của biến A vào
MOV AX,[A] ; thanh ghi AX
MOV AH,B ; Truy xuất phần tử đầu tiên của
MOV AH,B[0] ; mảng B
MOV AH,B + 1 ; Truy xuất phần tử thứ hai của
MOV AH,B[1] ; mảng B
MOV AH,B + 5 ; Truy xuất phần tử thứ 6 của
MOV AH,B[5] ; mảng B
Chú ý rằng lệnh MOV AX,[1000h] sẽ chuyển giá trị 1000h vào thanh ghi AX.
Nếu muốn chuyển nội dung tại ô nhớ 1000h vào thanh ghi AX thì phải dùng lệnh
MOV AX,DS:[1000h] hay MOV AX,DS:1000h
¾ Gián tiếp:
Toán hạng bộ nhớ gián tiếp cho phép dùng các thanh ghi BX, BP, SI, DI để
chỉ các giá trị trong bộ nhớ.
Giáo trình vi xử lý Lập trình hợp ngữ
Phạm Hùng Kim Khánh Trang 51
VD: MOV BX,2
MOV SI,3
MOV AH,B[BX] ; Chuyển phần tử thứ 3 của mảng B
; vào thanh ghi AH
MOV AH,B[BX+1] ; Chuyển phần tử thứ 4 của mảng B
MOV AH,B[BX]+1 ; vào thanh ghi AH (BX + 1 = 3)
MOV AH,B[BX+SI] ; Chuyển phần tử thứ 6 của mảng B
MOV AH,B[BX][SI] ; vào thanh ghi AH
MOV AH,[B+BX+SI] ; BX + SI = 5
MOV AH,[BX][SI]
MOV AH,B[BX+SI+5] ; Chuyển phần tử thứ 11 của mảng B
MOV AH,B[BX][SI]+5 ; vào thanh ghi AH
MOV AH,[B+BX+SI+5] ; BX + SI + 5 = 10
6. Tạo và thực thi chương trình hợp ngữ
Ta có thể tạo và thực thi một chương trình hợp ngữ trên một máy PC theo các
bước sau:
- Dùng một chương trình soạn thảo văn bản không định dạng (như NC,
Notepad, …) tạo một tập tin chứa chương trình hợp ngữ (gán phần mở
rộng của tập tin này là .ASM, giả sử là TEMP.ASM).
- Dùng chương trình TASM.EXE (Turbo Assembler) để dịch ra mã máy
dạng .OBJ: TASM TEMP
- Sau khi dịch xong, ta sẽ được file TEMP.OBJ chứa các mã máy của
chương trình. Để chuyển thành file thực thi, ta dùng chương trình
TLINK.EXE để chuyển thành tập tin .EXE: TLINK TEMP
- Nếu tập tin thực thi ở dạng .COM thì ta dùng thêm chương trình
EXE2BIN.EXE: EXE2BIN TEMP TEMP.COM
7. Tập lệnh hợp ngữ
7.1. Nhóm lệnh chuyển dữ liệu
7.1.1. Nhóm lệnh chuyển dữ liệu đa dụng
™ Lệnh MOV dst,src: chuyển nội dung toán hạng src vào toán hạng dst.
Toán hạng nguồn src có thể là thanh ghi (reg), bộ nhớ (mem) hay giá trị tức
thời (immed); toán hạng đích dst có thể là reg hay mem.
Lệnh MOV có thể có các trường hợp sau:
Reg8 ← reg8 MOV AL,AH
Reg16 ← reg16 MOV AX,BX
Mem8 ← reg8 MOV [BX],AL
Reg8 ← mem8 MOV AL,[BX]
Mem16 ← reg16 MOV [BX],AX
Reg16 ← mem16 MOV AX,[BX]
Reg8 ← immed8 MOV AL,04h
Mem8 ← immed8 MOV mem[BX],01h
Reg16 ← immed16 MOV AL,0F104h
Giáo trình vi xử lý Lập trình hợp ngữ
Phạm Hùng Kim Khánh Trang 52
Mem16 ← immed16 MOV mem[BX],0101h
SegReg ← reg16 MOV DS,AX
SegReg ← mem16 MOV DS,mem
Reg16 ← segreg MOV AX,DS
Mem16 ← segreg MOV [BX],DS
- Lệnh MOV không ảnh hưởng đến các cờ.
- Không thể chuyển trực tiếp dữ liệu giữa hai ô nhớ mà phải thông qua một
thanh ghi
MOV AX,mem1
MOV mem2,AX
- Không thể chuyển giá trị trực tiếp vào thanh ghi đoạn
MOV AX,1010h
MOV DS,AX
- Không thể chuyển trực tiếp giữa 2 thanh ghi đoạn
- Không thể dùng thanh ghi CS làm toán hạng đích
™ Lệnh XCHG dst,src: (Exchange) hoán chuyển nội dung 2 toán hạng.
Toán hạng chỉ có thể là reg hay mem.
- Lệnh XCHG không ảnh hưởng đến các cờ
- Không thể dùng cho các thanh ghi đoạn
™ Lệnh PUSH src: cất nội dung một thanh ghi vào stack.
Toán hạng chỉ có thể là reg16
™ Lệnh POP dst: lấy dữ liệu 16 bit từ stack đưa vào toán hạng dst.
Ta có thể dùng nhiều lệnh PUSH để cất dữ liệu vào stack nhưng khi dùng
lệnh POP để lấy dữ liệu ra thì phải dùng theo thứ tự ngược lại.
PUSH AX
PUSH BX
PUSH CX

POP CX
POP BX
POP AX
™ Lệnh XLAT [src]: chuyển nội dung của ô nhớ 8 bit vào thanh ghi AL.
Địa chỉ ô nhớ xác định bằng cặp thanh ghi DS:BX (nếu không chỉ ra src) hay
src, địa chỉ offset chứa trong thanh ghi AL.
Lệnh XLAT tương đương với các lệnh:
MOV AH,0
MOV SI,AX
Giáo trình vi xử lý Lập trình hợp ngữ
Phạm Hùng Kim Khánh Trang 53
MOV AL,[BX+SI]
7.1.2. Nhóm lệnh chuyển địa chỉ
™ Lệnh LEA reg16,mem16: (Load Effective Address) chuyển địa chỉ offset
của toán hạng bộ nhớ vào thanh ghi reg16.
Lệnh này sẽ tương đương với MOV reg16, OFFSET mem16
™ Lệnh LDS reg16,mem32: (Load pointer using DS) chuyển nội dung bộ
nhớ toán hạng mem32 vào cặp thanh ghi DS:reg16.
Lệnh LDS AX,mem tương đương với:
MOV AX,mem
MOV BX,mem+2
MOV DS,BX
™ Lệnh LES reg16,mem32: (Load pointer using ES) giống như lệnh LDS
nhưng dùng cho thanh ghi ES
7.1.3. Nhóm lệnh chuyển cờ hiệu
™ Lệnh LAHF: (Load AH from flag) chuyển các cờ SF, ZF, AF, PF và CF
vào các bit 7,6,4,2 và 0 của thanh ghi AH (3 bit còn lại không đổi)
™ Lệnh SAHF: (Store AH into flag) chuyển các bit 7,6,4,2 và 0 của thanh
ghi AH vào các cờ SF, ZF, AF, PF và CF.
™ Lệnh PUSHF: chuyển thanh ghi cờ vào stack
™ Lệnh POPF: lấy dữ liệu từ stack chuyển vào thanh ghi cờ
7.1.4. Nhóm lệnh chuyển dữ liệu qua cổng
Mỗi I/O port giao tiếp với CPU sẽ có một địa chỉ 16 bit cho nó. CPU gởi hay
nhận dữ liệu từ cổng bằng cách chỉ đến địa chỉ cổng đó. Tuỳ theo chức năng mà
cổng có thể: chỉ đọc dữ liệu (input port), chỉ ghi dữ liệu (output port) hay có thể đọc
và ghi dữ liệu (input/output port).
™ Lệnh IN: đọc dữ liệu từ cổng và đưa vào thanh ghi AL
IN AL,port8
IN AL...
 

Các chủ đề có liên quan khác

Top