Chương6
NHÓM LỆNH CHUYỂN DỮ LiỆU
Lệnhchuyểndữliệu
• MOV
• XCHG
• PUSH
• POP
• XLAT
• LEA
• LAHF
• SAHF
• PUSHF
• POPF
• IN
• OUT
LệnhMOV
• MOV reg, reg
• MOV reg, mem
• MOV reg, const
• MOV mem, reg
• MOV mem, const
MOV đích, nguồn ; đích ß nguồn
Đíchvànguồnphảicùngkíchthước
LệnhXCHG, PUSH, POP
XCHG
XCHG
đ
đ
í
í
ch
ch
,
,
ngu
ngu
ồ
ồ
n
n
;
;
đ
đ
í
í
ch
ch
ßà
ßà
ngu
ngu
ồ
ồ
n
n
PUSH
PUSH
to
to
á
á
nh
nh
ạ
ạ
ng
ng
;
;
đư
đư
a
a
to
to
á
á
n
n
h
h
ạ
ạ
ng
ng
lên
lên
đ
đ
ỉ
ỉ
nh
nh
stack
stack
POP
POP
to
to
á
á
nh
nh
ạ
ạ
ng
ng
;
;
l
l
ấ
ấ
y
y
gi
gi
á
á
tr
tr
ị
ị
trên
trên
đ
đ
ỉ
ỉ
nh
nh
stack
stack
(16bit)
(16bit)
(16bit)
PUSH
PUSH
POP
POP
Vídụ1
•Chobiếtnộidung cácthanhghiAX,BX,CX
saukhithựchiện đoạnchươngtrìnhsau:
MOVAX, 05ABh
MOVBX,1
XCHGBH,BL
MOVCX,BX
XCHGAL, CL
AX = ?BX= ?CX = ?
Vídụ1 (t.t)
MOVAX, 05ABh
MOVBX,1
XCHGBH,BL
MOVCX,BX
XCHGAL, CL
; AX: 05 AB
AH
AL
; BX: 00 01
; BX: 01 00
; CX: 01 00
; AX: 05 00
; CX: 01 AB
AX = 0500hBX= 0100hCX = 01ABh
Vídụ2
•Chobiếtnộidung cácthanhghiAX,BX,CX
saukhithựchiện đoạnchươngtrìnhsau:
MOV AX, 05A0h
PUSHAX
XCHGAH, AL
PUSHAX
POPBX
POPCX
AX = ?BX= ?CX = ?
Vídụ2
MOV AX, 05A0h
PUSHAX
XCHGAH, AL
PUSHAX
POPBX
POPCX
; AX: 05 A0
; 05A0 à stack
05A0
; AX: A0 05
; A005 à stack
A005
; BX: A0 05
; CX: 05 A0
LệnhXLAT
• Translate
– •“Dịch”giátrị trong AL thành giátrị mớitrong
bảngtạivịtríxác định theo độ dờibằng AL
– • Ứng dụng để chuyển đổisố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ệnhXLAT(t.t.)
• Vídụ đổisốthập phân <16 ra kítựHEXA
• •Khai báo bảng kítự
Bangkytu DB ‘0123456789ABCDEF’
• •Thựchiện:
MOV AL, 10 ;Nhậpsốcần đổivàoAL vídụ=10
;thựchiện đổi:
MOV BX, offset Bangkytu ;lấy địachỉ bảng dữ liệu
XLAT ;AL chứakítự ‘A’
LệnhIN
• Cúpháp:
IN AL,immed8
IN AL,DX
IN AX,immed8
IN AX,DX
• Ý nghĩa: đọcmộtgiátrị 8bit hoặc16bit 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ệnhIN (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ệnhOUT
• Dạnglệnh:
OUT immed8,accum
OUT DX,accum
• Giảithích: [cổngIO] ← thanhghitíchlũ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ệnhOUT (t.t)
OUT 20h,AL
MOV DX,2F8h
OUT DX,AL
LệnhLEA
• 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àitập
1.Nhập đoạnchươngtrìnhtrongDebug hoán đổinội
dung haivùngnhớ gồm5 byte. Vùngnhớ thứ nhất ở
địachỉ DS:100h, vùngnhớ thứ hai ởđịachỉ DS:120h
2.ViếtchươngtrìnhhoànchỉnhdạngCOM hoặcEXE
chophépnhậpmộtchuỗigồmđúng5 kýtự. In ra
mànhìnhchuỗinàytheothứ tựđảongược.
3.ViếtchươngtrìnhhoànchỉnhdạngCOM hoặcEXE
chophépnhậpmộtchuỗitừbànphímvớisốlượng
kýtựtùyý khôngvượtquá15. In ramànhìnhchuỗi
nàyvàchobiếtsốkýtựthựcsựnhập ở dạngsốHex.
• ;dang COM
• .model tiny
• .code
• org 100h
• start:
• movdx, offset moinhap
• movah,9
• int21h
• ;nhapchuoi
• movdx, offset chuoi
• movah,0ah
• int21h
• ;dao
• movsi,offsetchuoi+ 2 ; boqua 2 byte dau,
troden kitudautien
• xchgah,[SI]
• xchgah,[SI+4]
• xchgah,[SI]
• ;
• xchgah,[SI+1]
• xchgah,[SI+3]
• xchgah,[SI+1]
• ;
• movdx,offsetketqua
• movah,9
• int21h
• ;in chuoi
• movdx,offsetchuoi+2
• movah,9
• int21h
•
• int20h
• chuoidb 6,?,7 DUP('$')
•
• moinhapdb "Nhapvaochuoigom5 kitu: $"
• ketquadb 13,10,"Chuoi saukhidao: $"
• end start
• moval,byteptr[100h]
• movbl,byteptr[120h]
• xchgal,byteptr[120h]
• xchgbl,byteptr[100h]
• movax,wordptr[100h]
• movbx,wordptr[120h]
• xchgax,wordptr[120h]
• xchgbx,wordptr[100h]
• ;dang EXE
• .model small
• .data
• chuoidb 16,?,17 DUP('$')
• moinhapdb "Nhapvaochuoitoida15 kitu: $"
• ketquadb 13,10,"Chuoi vuanhap: $"
• soluongdb 13,10,"So luongkitu(he16): $"
• bang db "0123456789ABCDEF"
•
• .code
• main:
• movax,@data
• movds,ax
• movdx, offset moinhap
• movah,9
• int21h
• ;nhapchuoi
• movdx, offset chuoi
• movah,0ah
• int21h
• ;
• movdx,offsetketqua
• movah,9
• int21h
• ;in chuoi
• movdx,offsetchuoi+2
• movah,9
• int21h
• ;
• movdx,offsetsoluong
• movah,9
• int21h
• ;tinhso kitu
• movbx,offsetbang
• moval,[chuoi+1] ; lay so kituvuanhap
• xlat; tratrongbang de doisang ma ASCII
• ;
• movah,2
• movdl,al
• int21h
• ;
• ;exit
• movah,4ch
• int21h
• end main