Tài li u th
c
hành Vi x lý
BÀI 1: PH N M M MÔ PH NG 8086 MICROPROCESSOR EMULATOR (EMU8086)
M C ĐÍCH
Giúp sinh viên kh o sát các v n đề sau:
S d ng ph n m m Emu8086 để mô ph ng ho t độ ng c a vi x lý 8086.
THI T B S D NG Máy vi tính. Ph n m m Emu8086
1. Gi i thi
u.
Ph n m m Emu8086 là ph n m m cho phép mô ph ng ho t đ ng c a vi x lý 8086 bao g m các câu l nh c b n c a 8086, x lý ng t m m, giao ti p v i thi t b ngo i vi, …
V ũ
Kh i độ ng ch
Start > All Program > emu8086 > emu8086
Đ c H òa
ng
trình
Trang 1
Tài li u th
c
hành Vi x lý
C a s ch
ng trình sau khi kh i đ ng: Thanh công c chu n
Vùng không gian so n th o ch ng trình
S d ng thanh công c chu n:
New: t o file m i
Open: m file có s n
Save: l u tr file
Compile: biên dịch file
Emulate: biên d ch và th c hi n mô ph ng
Các thao tác trên thanh công c chu n c ng có th th c hi n thông qua menu File và menu Emulator.
V ũ
T o và th c thi ch ng trình: - Nh n New trên thanh công c s xu t hi n c a s ch n lo i file:
Đ c H òa
Trang 2
Tài li u th
c
hành Vi x lý
Nh n Cancel để b qua, c a s so n th o c a ch -
ng trình s xu t hi n.
So n chư ng trình h p ng và nh n vào nút Emulate để biên d ch và mô ph ng ch ng trình.
Sau khi biên d ch thành công (không có l i trong ch ng trình), Emu8086 s m thêm 2 c a s : c a s ch ng trình g c và c a s mô ph ng. Ch
V ũ
Đ c H òa
ng trình g c:
Trang 3
Tài li u th
c
hành Vi x lý
Nh n Run để th c thi
C a s mô ph ng:
-
N u ch
ng trình có l i, c a s thông báo l i s xu t hi n:
Dòng l i
V ũ
Đ c H òa
L i t i dòng 11
Trang 4
Tài li u th
c
hành Vi x lý
Nh n Close để quay l i c a s so n th o.
C u trúc ch
ng
trình 8086:
.model small .stack 100h .data
;Khai bao du lieu .code main proc mov ax,@data mov ds,ax
;Chuong trinh hop ngu
mov ah,4Ch int 21h main endp ;----- Cac chuong trinh con --Ctc1 proc
; Ma lenh cua chuong trinh con ret Ctc1 endp ;----------End
2. Cơ s lý thuy 2.1.
Ng t 21h
Hàm 01h: nh p m t ký t t bàn phím và hi n ký t nh p ra màn hình. N u
-
không có ký t nh p, hàm 01h s đợ i cho đế n khi nh p. G i: AH = 01h Tr v : AL ch a mã ASCII c a ký t nh p MOV INT
AH,01h 21h
; AL ch a mã ASCII c a ký t
nh p
Hàm 02h: xu t m t ký t trong thanh ghi DL ra màn hình t i v trí con tr
-
hi n hành G i AH = 02h, DL = mã ASCII c a ký t Tr v : không có MOV MOV
V ũ
t
Đ c H òa
AH,02h DL,'A' Trang 5
Tài li u th
c
hành Vi x lý
INT
21h
Hàm 08h: gi ng hàm 01h nh ng không hi n th ký t ra màn hình
Hàm 09h: xu t m t chu i ký t ra màn hình t i v trí con tr hi n hành, địa
-
ch chu i đư c ch a trong DS:DX và ph ả i đ G i AH = 09h, DS:DX = địa ch chu i Tr v : không có .DATA Msg
DB
c k t thúc b ng ký t $
'Hello$'
…
MOV LEA INT
AH,09h DX,Msg 21h
Hàm 0Ah: nh p m t chu i ký t t bàn phím (t i đa 255 ký t ), dùng phím
ENTER k t thúc chu i - G i AH = 0Ah, DS:DX = địa ch l u chu i - Tr v : không có Chu i ph i có d ng sau: -
Byte 0: S byte t i đa c n đọ c (k c ký t Enter) Byte 1: s byte đã đọ c Byte 2: lư u các ký t đọ c .DATA Msg DB DB
DB ? 101
101
; Đọ c t i đa 100 ký t
DUP(?)
… MOV LEA INT
AH,0Ah DX,Msg 21h
Hàm 0Bh: ki m tra phím nh n trên bàn phím
G i: AH = 0Bh Tr v : AL = 0FFh n u có nh n phím, AL = 0 n u không nh n phím
Hàm 4Ch: k t thúc ch ng trình
MOV INT
2.2.
Ng t 10h
Hàm 02h: G i AH = 02h, DH = dòng, DL = c t
MOV MOV INT
V ũ
AH,4Ch 21h
Đ c H òa
AH,02h DX,0F15h 10h
Trang 6
Tài li u th
c
3. Ti
n trình th
3.1. -
hành Vi x lý
c hi
n
Các l nh c b n
Bài 1.1: Th c hi n ch
ng trình sau (c ng 49h v i 8Ah):
.model small .stack 100h .data msg db 'Hello$' .code main proc mov ax,@data mov ds,ax
mov al,49h add al,8Ah
mov ah,4Ch int 21h main endp ;----------End
V ũ
-
Nh n vào nút Emulate để th c hi n mô ph ng.
-
T i c a s mô ph ng, ch n menu View > Flags để hi n th n i dung các c .
Đ c H òa
Trang 7
Tài li u th
c
hành Vi x lý
C a s flags cho phép xem n i dung c a các c :
V ũ
-
Nh n nút Run th c thi ch thích.
-
Bài 1.2: Th c hi n ch ng trình c ng 2 s và ki m tra n i dung các c : CF, ZF, SF, OF, PF, AF. T đó rút ra k t lu n v m c đích c a các c này.
-
0FFh + 01h 0FFh + 10h 40h + 55h 22h + 8Fh
Đ c H òa
ng trình và quan sát n i dung các c . Gi i
Trang 8
Tài li u th
c
-
99h + 7Ch
-
Bài 1.3: Th c hi n l nh nhân gi a 15h và 41h, 154h và 289Ah.
-
Bài 1.4: Th c hi n l nh chia gi a 5623h và 14h, 3219154h và 9Ah.
-
Bài 1.5: Th c hi n l nh d ch trái 1 bit, 2 bit, 3 bit giá tr 25h.
-
Bài 1.6: Th c hi n l nh quay trái 1 bit, 2 bit, 3 bit giá tr 25h.
-
Bài 1.7: Th c hi n l nh quay trái k t h p v i c carry 1 bit, 2 bit, 3 bit giá tr 25h.
-
Bài 1.8: Th c hi n l nh d ch ph i 1 bit, 2 bit, 3 bit giá tr 25h.
-
Bài 1.9: Th c hi n l nh quay ph i 1 bit, 2 bit, 3 bit giá tr 25h.
-
Bài 1.10: Th c hi n l nh quay ph i k t h p v i c carry 1 bit, 2 bit, 3 bit giá tr 25h.
-
Bài 1.11: S d ng l nh IN để nh p d li u và l nh OUT để xu t d li u ra thi t b ngo i v i c ó đị a ch 110. Chú ý thêm vào chu i #start=simple.exe# đầ u ch ng trình để ki m tra k t qu .
3.2.
hành Vi x lý
S d ng ng t 21h và ng t 10h
Bài 1.12: Dùng hàm 09h xu t chu i ra màn hình: .model small .stack 100h .data msg db 'Hello$' .code main proc mov ax,@data mov ds,ax
mov ah,09h
; Xu t chu i ra màn hình
lea dx,msg int 21h exit: mov ah,4Ch int 21h main endp V ũ
Đ c H òa
Trang 9
Tài li u th
c
hành Vi x lý
;----------End
Bài 1.13: B d u $ xét k t qu .
Bài 1.14: Th c hi n gi ng nh bài 1.12 nh ng th c hi n liên t c cho đế n khi nh n m t phím b t k trên bàn phím thì d ng. G i ý: dùng hàm 0Bh để ki m tra phím nh n, n u có nh n phím thì k t thúc ch ng trình.
cu i chu i Hello, th c hi n l i ch
ng trình và nh n
.model small .stack 100h .data msg db 'Hello$' .code main proc mov ax,@data mov ds,ax
mov ah,09h
; Xu t chu i ra màn hình
lea dx,msg int 21h
mov ah,0Bh int 21h cmp al,00h jne exit ; Xu t chu i exit: mov ah,4Ch int 21h
V ũ
Đ c H òa
Trang 10
Tài li u th
c
hành Vi x lý …
end
Bài 1.15: Xu t chu i ‘Hello’ ra màn hình t i hàng 10, c t 10. G i ý: dùng hàm 02h c a ng t 10h chuy n to đ trư ớ c khi xu t chu i. Bài 1.16: Nh p m t ký t t bàn phím và xu t ký t v a nh p ra màn hình t i hàng 11, c t 10. .model small .stack 100h .data msg db 'Hello$' .code main proc mov ax,@data mov ds,ax
mov ah,08h
; Nh p ký t
t
bàn phím
int 21h
V ũ
Đ c H òa
Trang 11
Tài li u th
c
hành Vi x lý
push ax
; L u ký t
mov ah,02h
; Chuy n to
v a nh p đ
con tr
mov dx,0B0Ah int 10h pop ax
mov dl,al
; Xu t ký t
mov ah,02h int 21h
mov ah,4Ch int 21h main endp ;----------End
Bài 1.17: Nh p m t ký t t bàn phím và xu t ra màn hình d ng ch hoa. G i ý: thêm m t đo n ch ng trình ki m tra ký t nh p, n u là ký t ch th ng thì chuy n thành ch hoa r i xu t ta màn hình. cmp al,'a'
; N u < ‘a’
jb next
; hay > ‘z’ thì không ph i là
cmp al,'z'
; ch
th
ng
ja next sub al,20h
; Chuy n t
ch
th
ng -> hoa
next:
Bài 1.18: Nh p liên t c các ký t , xu t ra màn hình d ng ch hoa và k t thúc ch ng trình khi nh n phím ESC. G i ý: sau khi nh p thì ki m tra ký t v a nh p, n u là ESC thì thoát (mã ASCII c a phím ESC là 27 hay 1Bh). cmp al,27 je exit
V ũ
Đ c H òa
Trang 12
Tài li u th
c
hành Vi x lý …
exit: mov ah,4Ch int 21h
Bài 1.19: Dùng hàm 02h c a ng t 21h để xu t chu i:
.model small .stack 100h .data msg db 'Hello$' .code main proc mov ax,data mov ds,ax
mov si,0 lap: mov dl,msg[si] cmp dl,'$' je exit
mov ah,02h int 21h
inc si jmp lap exit: mov ah,4Ch int 21h main endp end main
V ũ
Đ c H òa
Trang 13
Tài li u th
c
hành Vi x lý
Bài 1.20: Dùng hàm 02h c a ng t 21h để xu t chu i ‘Hello’ theo chi u th ng đứ ng b t đầ u t i hàng 1, c t 10. G i ý: dùng hàm 02h c a ng t 10h để di chuy n to độ con tr sau khi xu t m t ký t . H e l l o
Bài 1.21: Xu t chu i ‘Hello’ theo đư ng chéo nh hình v b t đầ u t i hàng 1, c t 1. H
e l l o
Bài 1.22: Xu t chu i ‘Hello’ theo đư ng chéo nh hình v b t đầ u t i hàng 1, c t 40. H e l l o
Bài 1.23: Di chuy n ký t ‘A’ theo chi u ngang t trái sang ph i b t đầ u t i hàng 1, c t 1 và k t thúc t i hàng 1, c t 40.
.model small .stack 100h .data .code main proc V ũ
Đ c H òa
Trang 14
Tài li u th
c
hành Vi x lý
mov ax,data mov ds,ax
mov dh,1 mov dl,1
; Hàng 1, c t 1
mov ah,02h
; G i hàm 02h c a ng t 10h
int 10h
; đ
lap:
chuy n to
đ
push dx mov dl,'A'
; G i hàm 02h c a ng t 21h
mov ah,02h
; đ
xu t ký t
int 21h pop dx
call delay
; T o th i gian tr
mov ah,02h int 10h push dx mov dl,' '
; Xu t ký t
mov ah,02h
;
đ
xoá ký t
kho ng tr ng
c
int 21h pop dx
inc dl
; Chuy n sang c t k
cmp dl,41
; Đế n c t 41 thì d ng
jne lap exit: mov ah,4Ch int 21h V ũ
Đ c H òa
Trang 15
Tài li u th
c
hành Vi x lý
main endp delay proc push cx mov cx,0fh loop $ pop cx ret delay endp end main
Bài 1.24: Xoá đo n ch ng trình in đậ m trong bài 1.23, th c thi ch ng trình và ki m tra k t qu . Bài 1.25: Th c hi n ch ng trình 1.23 nh ng theo chi u th ng đứ ng t trên xu ng b t đầ u t i hàng 1, c t 1 và k t thúc t i hàng 15, c t 1. Bài 1.26: Th c hi n ch ng trình 1.23 nh ng theo chi u ngang t ph i sang trái b t đầ u t i hàng 1, c t 40 và k t thúc t i hàng 1, c t 1. Bài 1.27: Th c hi n ch ng trình 1.23 nh ng theo chi u th ng đứ ng t d i lên b t đầ u t i hàng 15, c t 1 và k t thúc t i hàng 15, c t 1. Bài 1.28: Th c hi n ch ng trình 1.23 nh ng theo đư ng chéo như hình v . Hàng 1, c t 1
Hàng 15, c t 15
Bài 1.29: Th c hi n ch hình v .
ng trình 1.23 nh ng theo đư ng chéo như
Hàng 1, c t 1
Hàng 15, c t 15
Bài 1.30: Th c hi n ch hình v .
ng trình 1.23 nh ng theo đư ng chéo như Hàng 1, c t 15
Hàng 15, c t 1 V ũ
Đ c H òa
Trang 16
Tài li u th
c
hành Vi x lý
Bài 1.31: Th c hi n ch hình v .
ng trình 1.23 nh ng theo đư ng chéo như Hàng 1, c t 15
Hàng 15, c t 1
Bài 1.32: Th c hi n ch ng trình 1.23 nh ng di chuy n ký t như hình v , b t d u t i hàng 1, c t 1. Hàng 1, c t 10
Hàng 1, c t 1
Hàng 10, c t 10
Hàng 10, c t 1
Hàng 20, c t 1
Bài 1.33: Nh p m t chu i t bàn phím và xu t chu i ra màn hình b ng cách dùng hàm 02h c a ng t 21h.
.model small .stack 10h .data msg db 101 db ?
; Chu i có t i đa 100 ký t ; S
ký t
th c t
db 101 dup(?) .code main proc mov ax,@data mov ds,ax
mov ah,0Ah
; Hàm 0Ah nh p chu i
lea dx,msg
; DX ch a đa ch
chu i
int 21h
V ũ
Đ c H òa
Trang 17
Tài li u th
c
hành Vi x lý
mov si,2
; V
trí l u ký t
nh p
lap: mov dl,msg[si] cmp dl,13
; Phím Enter thì k t thúc
je exit
mov ah,02h int 21h
inc si jmp lap exit: mov ah,4Ch int 21h main endp end main
Bài 1.34: Thay giá tr ban đầ u c a SI t i dòng in đậ m trong bài 1.33 b ng giá tr 0, th c thi ch ng trình và quan sát k t qu . Bài 1.35: Nh p m t chu i t bàn phím và xu t chu i ra màn hình b ng cách dùng hàm 09h c a ng t 21h.
L u ý là hàm 09h dùng để xu t chu i trong đó chu i b t bu c ph i k t thúc b ng ký t $ nên ph i thêm ký t này vào cu i chu i tr c khi xu t. .model small .stack 10h .data msg db 101 db ? db 101 dup(?) .code main proc mov ax,@data mov ds,ax
V ũ
Đ c H òa
Trang 18
Tài li u th
c
hành Vi x lý
mov
ah,0Ah
lea
dx,msg
int 21h
mov si,1
; Đọ c s
l
ng ký t
nh p
mov al,msg[si] mov ah,0 mov si,ax
; K t qu
ch a vào SI
mov al,'$'
; Thêm ‘$’ vào cu i chu i
mov msg[si],al
mov ah,09h
; G i hàm 09h xu t chu i
lea dx,msg
add dx,2 int 21h
exit: mov ah,4Ch int 21h main endp end main
V ũ
Bài 1.36: B dòng in đậ m trong bài 1.35, th c thi ch ng trình và quan sát k t qu . Bài 1.37: Th c hi n bài 1.32 nh ng thay ký t ‘A’ b ng chu i ‘LAP TRINH HOP NGU’. G i ý: Thay th hàm 02h trong bài 1.32 b ng hàm 09h (thêm ký t $ vào cu i chu i).
Đ c H òa
Trang 19