Tải bản đầy đủ (.pdf) (23 trang)

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 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (167.61 KB, 23 trang )

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

×