Kiến trúc máy tính phần ii hợp ngữ - chương 6 nhóm lệnh chuyển dữ liệu
Lệnh chuyểndữ liệu • MOV • XCHG • PUSH • POP • XLAT • LEA • LAHF • SAHF • PUSHF • POPF • IN • OUT
Bạn đang xem trước 20 trang tài liệu Kiến trúc máy tính phần ii hợp ngữ - chương 6 nhóm lệnh chuyển dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 6
NHÓM LỆNH CHUYỂN DỮ LiỆU
Lệnh chuyển dữ liệu
• MOV
• XCHG
• PUSH
• POP
• XLAT
• LEA
• LAHF
• SAHF
• PUSHF
• POPF
• IN
• OUT
Lệnh MOV
• MOV reg, reg
• MOV reg, mem
• MOV reg, const
• MOV mem, reg
• MOV mem, const
MOV đích, nguồn ; đíchß nguồn
Đích và nguồn phải cùng kích thước
Lệnh XCHG, PUSH, POP
XCHG đích, nguồn ; đíchßà nguồn
PUSH toánhạng ; đưa toán hạng lên đỉnh stack
POP toánhạng ; lấy giá trị trên đỉnh stack
(16bit)
(16bit)
(16bit)
PUSH POP
Ví dụ 1
• Cho biết nội dung các thanh ghi AX,BX,CX
sau khi thực hiện đoạn chương trình sau:
MOV AX, 05ABh
MOV BX, 1
XCHG BH, BL
MOV CX, BX
XCHG AL, CL
AX = ? BX= ? CX = ?
Ví dụ 1 (t.t)
MOV AX, 05ABh
MOV BX, 1
XCHG BH, BL
MOV CX, BX
XCHG AL, CL
; AX: 05 AB
AH AL
; BX: 00 01
; BX: 01 00
; CX: 01 00
; AX: 05 00
; CX: 01 AB
AX = 0500h BX= 0100h CX = 01ABh
Ví dụ 2
• Cho biết nội dung các thanh ghi AX,BX,CX
sau khi thực hiện đoạn chương trình sau:
MOV AX, 05A0h
PUSH AX
XCHG AH, AL
PUSH AX
POP BX
POP CX
AX = ? BX= ? CX = ?
Ví dụ 2
MOV AX, 05A0h
PUSH AX
XCHG AH, AL
PUSH AX
POP BX
POP CX
; AX: 05 A0
; 05A0 à stack
05A0
; AX: A0 05
; A005 à stack
A005
; BX: A0 05
; CX: 05 A0
Lệnh XLAT
• Translate
– • “Dịch” giá trị trong AL thành giá trị mới trong
bảng tại vị trí xác định theo độ dời bằng AL
– • Ứng dụng để chuyển đổi số liệu
• Cú pháp: XLAT
– • ‘Input’:
• • BX chứa địachỉ bảng dữ liệu
• • AL chứabyte cần đổi
– • ‘Output’:
• • AL chứagiátrị tìm thấytrongbảng tại địachỉ BX+AL
Lệnh XLAT(t.t.)
• Ví dụ đổi số thập phân < 16 ra kí tự HEXA
• • Khai báo bảng kí tự
Bangkytu DB ‘0123456789ABCDEF’
• •Thực hiện:
MOV AL, 10 ;Nhập số cần đổi vào AL ví dụ =10
;thực hiện đổi :
MOV BX, offset Bangkytu ;lấy địa chỉ bảng dữ liệu
XLAT ;AL chứakítự ‘A’
Lệnh IN
• Cú pháp:
IN AL,immed8
IN AL,DX
IN AX,immed8
IN AX,DX
• Ý nghĩa : đọc một giá trị 8bit hoặc 16bit từ
cổng
– Dạng lệnh có immed8 dùng trong trường hợp địa chỉ cổng
xuất nhập 8 bit.
– Dạng lệnh có thanh ghi DX dùng cho trường hợp địa chỉ
cổng 16 bit.
Lệnh IN (t.t)
• Ví dụ đọc từ cổng có số hiệu 8bit:
IN AL,61h
IN AX,40h
đọc từ cổng có số hiệu 16bit:
MOV DX,378h
IN AL,DX
Lệnh OUT
• Dạng lệnh :
OUT immed8,accum
OUT DX,accum
• Giải thích : [cổng IO] ← thanh ghi tích lũy
Xuất dữ liệu từ thanh ghi bộ tích lũy AL hoặc AX ra
cổng xuất nhập có địa chỉ 8 bit là số tức thời immed8
hay có địa chỉ 16 bit trong thanh ghi DX.
Lệnh OUT (t.t)
OUT 20h,AL
MOV DX,2F8h
OUT DX,AL
Lệnh LEA
• Dạng lệnh : LEA reg16,mem
• Giải thích : thđ ← địa chỉ
• Nạp địa chỉ hiệu dụng vào thanh ghi 16 bit.
• Ví dụ :
LEA BX,[1000h] ; BX ← 1000h
LEA SI,[DI][BX][2000h] ; SI ← DI+BX+2000h
Bài tập
1. Nhập đoạn chương trình trong Debug hoán đổi nội
dung hai vùng nhớ gồm 5 byte. Vùng nhớ thứ nhất ở
địa chỉ DS:100h, vùng nhớ thứ hai ở địa chỉ DS:120h
2. Viết chương trình hoàn chỉnh dạng COM hoặc EXE
cho phép nhập một chuỗi gồm đúng 5 ký tự. In ra
màn hình chuỗi này theo thứ tự đảo ngược.
3. Viết chương trình hoàn chỉnh dạng COM hoặc EXE
cho phép nhập một chuỗi từ bàn phím với số lượng
ký tự tùy ý không vượt quá 15. In ra màn hình chuỗi
này và cho biết số ký tự thực sự nhập ở dạng số Hex.
• ;dang COM
• .model tiny
• .code
• org 100h
• start:
• mov dx, offset moinhap
• mov ah,9
• int 21h
• ;nhap chuoi
• mov dx, offset chuoi
• mov ah,0ah
• int 21h
• ;dao
• mov si,offset chuoi + 2 ; bo qua 2 byte dau,
tro den ki tu dau tien
• xchg ah,[SI]
• xchg ah,[SI+4]
• xchg ah,[SI]
• ;
• xchg ah,[SI+1]
• xchg ah,[SI+3]
• xchg ah,[SI+1]
• ;
• mov dx,offset ketqua
• mov ah,9
• int 21h
• ;in chuoi
• mov dx,offset chuoi+2
• mov ah,9
• int 21h
•
• int 20h
• chuoi db 6,?,7 DUP('$')
•
• moinhap db "Nhap vao chuoi gom 5 ki tu: $"
• ketqua db 13,10,"Chuoi sau khi dao: $"
• end start
• mov al,byte ptr [100h]
• mov bl,byte ptr [120h]
• xchg al,byte ptr [120h]
• xchg bl,byte ptr [100h]
• mov ax,word ptr [100h]
• mov bx,word ptr [120h]
• xchg ax,word ptr [120h]
• xchg bx,word ptr [100h]
• ;dang EXE
• .model small
• .data
• chuoi db 16,?,17 DUP('$')
• moinhap db "Nhap vao chuoi toi da 15 ki tu: $"
• ketqua db 13,10,"Chuoi vua nhap: $"
• soluong db 13,10,"So luong ki tu(he 16): $"
• bang db "0123456789ABCDEF"
•
• .code
• main:
• mov ax,@data
• mov ds,ax
• mov dx, offset moinhap
• mov ah,9
• int 21h
• ;nhap chuoi
• mov dx, offset chuoi
• mov ah,0ah
• int 21h
• ;
• mov dx,offset ketqua
• mov ah,9
• int 21h
• ;in chuoi
• mov dx,offset chuoi+2
• mov ah,9
• int 21h
• ;
• mov dx,offset soluong
• mov ah,9
• int 21h
• ;tinh so ki tu
• mov bx,offset bang
• mov al,[chuoi+1] ; lay so ki tu vua nhap
• xlat ; tra trong bang de doi sang ma ASCII
• ;
• mov ah,2
• mov dl,al
• int 21h
• ;
• ;exit
• mov ah,4ch
• int 21h
• end main