You are on page 1of 7

Bi thc hnh s 3

Ngn xp Th tc Macro
Mc ch
Hiu c c ch hot ng ca ngn xp, qu trnh gi mt th tc. Bit cch s dng ngn xp, khai bo v gi th tc. Bit cch to v s dng macro.

Tm tt l thuyt
Ngn xp 1. Mt s lu : Ngn xp (Stack) l vng nh c bit c truy cp theo c ch vo trc ra sau (LIFO Last In First Out), ngha l d liu no a vo sau s c ly ra trc. Ngn xp gm nhiu phn t, mi phn t l mt t (2 bytes). V tr ca ngn xp trong b nh c xc nh bi cp thanh ghi SS:SP (SS cha a ch on, SP cha a ch ca nh ngn xp). Khi cha s dng, ngn xp rng, v tr c xc nh bi SP lc l y ngn xp. Khai bo: .STACK <kch thc ca ngn xp>

2.

V d: khai bo mt vng ngn xp c kch thc 256 bytes: .STACK 100h 3. Cc thao tc: a tr vo (nh) ngn xp: PUSH <ngun> PUSHW <hng>

PUSHF Ly tr ( nh) ra khi ngn xp: POP <ch> POPF

; a ngun (thanh ghi hay t nh ; 16 bit) vo nh ngn xp ; a trc tip mt hng16 bit vo ; nh ngn xp ; a ni dung thanh ghi c vo nh ; ngn xp ; ly gi tr (2 bytes) nh ngn xp ; a vo ch (thanh ghi (tr thanh ; ghi IP) hay t nh 16 bit) ; ly gi tr (2 bytes) nh ngn xp ; a vo thanh ghi c

Ch : Cc lnh PUSH, PUSHF, POP v POPF khng nh hng ti cc c. V d: Chng trnh xut chui ngc dng stack:

.model small .stack 100h .data msg1 DB 'Nhap vao 1 chuoi: $' msg2 DB 10,13,'Chuoi nghich dao la: $' .code mov mov mov lea int mov nhap: mov ah,1 int 21h cmp al,13 je thongbaoxuat xor ah,ah push ax inc cx jmp nhap thongbaoxuat: mov ah,9 lea dx,msg2 int 21h xuat: pop ax mov dl,al mov ah,2 int 21h loop xuat mov int END ah,4ch 21h ax,@data ds,ax ah,9 dx,msg1 21h cx,0

1. Khai bo

SS:SP

000h 0FCh 0FCh 100h

2. Nhp ln lt a,b,c a vo ngn xp: Nhp k t a: 000h 0FCh 0FCh SS:SP 00 61 100h Nhp k t b: SS:SP 00 00 62 61 000h 0FCh 0FCh 100h 000h 0FCh 0FCh 100h

Nhp k t c: SS:SP 00 00 00 63 62 61

3. Xut cc gi tr trong ngn xp Xut k t c: 000h SS:SP 0FCh 00 63 0FCh 00 62 100h 00 61 Xut k t b: SS:SP 00 00 62 61 000h 0FCh 0FCh 100h 000h 0FCh 0FCh 100h

Xut k t a:

SS:SP

00

61

Th tc Khai bo: <Tn th tc> PROC <Kiu>;kiu l NEAR(mc nh) hay FAR ; thn th tc RET <Tn th tc> ENDP Th tc thng c vit cui chng trnh. 2. Gi th tc: CALL <Tn th tc> CALL <a ch> ; a ch l thanh ghi hoc vng nh cha a ch ; th tc 3. Hot ng ca li gi th tc: Khi thc hin li gi th tc (CALL) th: a ch ca lnh k lnh CALL (*) s c ct vo ngn xp a ch ca lnh u tin trong th tc c a vo IP Khi thc hin lnh RET quay v trnh gi th: a ch trong ngn xp c ly ra v c vo IP. Do , nu trong th tc c thao tc vi ngn xp th trong th tc, trc khi thao tc vi ngn xp ta nn lu li a ch (*) trn (chnh l gi tr hin thi trong ngn xp) quay tr v trnh gi. Xem m t trong v d sau. V d: Nhp xut chui k t 1.

.model small .stack 100h .code CALL Nhap CALL Xuat mov ah,4ch int 21h ;--------------------------------------------------Nhap PROC pop bx mov ah,2 mov dl,? int 21h xor cx,cx nhap: mov ah,1 int 21h cmp al,13 je ketthucnhap push ax inc cx jmp nhap ketthucnhap: push bx RET Nhap ENDP ;--------------------------------------------------Xuat PROC pop bx mov ah,2 mov dl,13 int 21h mov dl,10 int 21h jcxz ketthucxuat xuat: pop dx int 21h loop xuat ketthucxuat: push bx RET Xuat ENDP END

1. Khai bo

SS:SP 2. Gi th tc Nhap

000h 0FCh 0FCh 100h 000h 0FCh 0FCh 100h

SS:SP

CALL Xuat

IP = a ch lnh pop bx 3. Lu li a ch quay v 000h 0FCh 0FCh 100h SS:SP BX = a ch lnh CALL Xuat 4. Nhp k t a,b: 000h 0FCh SS:SP 0FCh 00 62 100h 00 61 5. Tr li a ch quay v BX = a ch lnh CALL Xuat SS:SP CALL Xuat 00 62 00 61 000h 0FCh 0FCh 100h 000h 0FCh 0FCh 100h

6. Kt thc th tc Nhp: SS:SP 00 00 62 61

IP = a ch lnh CALL Xuat Li gi th tc xut (CALL Xuat) cng hot ng tng t nh trn.

Macro 1. Mt s lu : Khi chng ta c nhiu on code ging nhau, chng ta c th s dng macro thay th, ging nh chng ta dng define trong C. Bn cht l thay th li gi macro bng cc lnh trong thn macro. Cc macro nn phc hi nhng thanh ghi m n s dng tr nhng thanh ghi cha kt qu. 2. Khai bo: <tn macro> MACRO <cc i s> ; thn macro ENDM 3. Hai cch s dng macro To macro trc tip trong chnng trnh: Cc macro thng c khai bo u chng trnh trc phn .code. V d: Xut mt chui ra mn hnh s dng macro .model small .stack 100h .data chuoi1 db hello,10,13,$ chuoi2 db bye,10,13,$ @xuatchuoi macro chuoi lea dx,chuoi mov ah,9 int 21h endm .code @xuatchuoi chuoi1 @xuatchuoi chuoi2 end Xy dng th vin cc macro: To 1 th vin (tp tin) cha cc macro include vo chng trnh (thng trc phn .code) bng lnh include V d: Xut mt chui ra mn hnh s dng th vin macro THUVIEN.INC @xuatchuoi macro chuoi lea dx,chuoi mov ah,9 int 21h endm

TestMacro.asm .model small .stack 100h .data chuoi1 db hello,10,13,$ chuoi2 db bye,10,13,$ INCLUDE THUVIEN.INC .code @xuatchuoi chuoi1 @xuatchuoi chuoi2 end 4. Cc thnh phn cc b ca macro: Trong macro, ta cng c th khai bo cc bin, nhn cc b trnh gy ra li khi gi macro nhiu ln. C php : LOCAL <danh sch cc nhn, cc bin cc b> V d: Xut mt chui hng ra mn hnh s dng macro vi bin cc b .model small .stack 100h @xuatchuoi macro chuoi LOCAL chuoicucbo, nhancucbo .data chuoicucbo db chuoi,$ .code lea dx,chuoicucbo mov ah,9 int 21h endm .code nhancucbo: @xuatchuoi <hello,10,13> @xuatchuoi bye end Lu : nu cn truyn chui phc tp th ta cn s dng <> bo cho trnh bin dch bit y l mt i s.

Ti liu tham kho


1. 2. 3. 4. Nguyn Minh Tun, Gio trnh hp ng - Chng 6, HKHTN, 2002 Randal Hyde, The art of assembly language programming Chapter 11,12. Norton Guide Dan Rollins, TechHelp v.6.0

Bi tp
Bi 1: Vit chng trnh kim tra mt biu thc i s c cha cc du ngoc (nh (), [] v {}) l hp l hay khng hp l . V d: (a + [b { c * ( d e ) } ] + f) l hp l nhng (a + [b { c * ( d e )] } + f) l khng hp l. Bi 2: Tnh gi tr biu thc nhp bi tp 2 theo th t t tri sang phi. Bi 3: Vit li cc bi tp tun trc di dng cc th tc Bi 4: Xy dng mt th vin cc macro

M rng
1. C nhng cch no truyn tham s cho th tc ? nhn kt qu tr v ? 2. Th vit mt th tc quy. 3. Tm hiu cch phn chia chng trnh thnh nhiu file v cch bin dch, lin kt chng.

Hng dn
Bi 1. dng ngn xp PUSH cc du ngoc tri ( (, {, [ ) vo ngn xp. Nu gp du ngoc phi ( ), }, ] ) th POP t stack ra. Nu khng POP c, hoc POP ra khng ng loi vi du ngoc phi -> khng hp l . Ngc li l biu thc hp l.

You might also like