You are on page 1of 108

e cng bai giang HP NG Chng 1 : C BAN VE HP NG

Trong chng nay se gii thieu nhng nguyen tac chung e tao ra , dch va chay mot chng trnh hp ng tren may tnh . Cau truc ng phap cua lenh hp ng trong giao trnh nay c trnh bay theo Macro Assembler ( MASM) da tren CPU 8086 . 1.1 Cu phap lenh hp ng Mot chng trnh hp ng bao gom mot loat cac menh e ( statement) c viet lien tiep nhau , moi menh e c viet tren 1 dong . Mot menh e co the la : mot lenh ( instruction) : c trnh bien dch ( Assembler =ASM) chuyen thanh ma may. mot ch dan cua Assembler ( Assembler directive) : ASM khong chuyen thanh ma may Cac menh e cua ASM gom 4 trng :

Name

cac trng cach nhau t nhat la mot ky t trong hoac mot ky t TAB v du lenh e sau : START : MOV CX,5 ; kh tao thanh ghi CX Sau ay la mot ch dan cua ASM : MAIN PROC ; tao mot thu tuc co ten la MAIN

Operation

Operand(s)

Comment

1.1.1 Trng Ten ( Name Field) Trng ten c dung cho nhan lenh , ten thu tuc va ten bien . ASM se chuyen ten thanh a ch bo nh . Ten co the dai t 1 en 31 ky t . Trong ten cha cac ky t t a-z , cac so va cac ky t ac biet sau : ? ,@ , _ , $ va dau . Khong c phep co ky t trong trong phan ten . Neu trong ten co ky t . th no phai la ky t au tien . Ten khong c bat au bang mot so . ASM khong phan biet gia ky t viet thng va viet hoa . Sau ay la cac v du ve ten hp le va khong hp le trong ASM . Ten hop le COUNTER1 @CHARACTER SUM_OF_DIGITS DONE? .TEST Ten khong hp le TWO WORDS 2ABC A45.28 YOU&ME ADD-REPEAT

e cng bai giang HP NG

1.1.2 Trng toan t ( operation field) oi vi 1 lenh trng toan t cha ky hieu ( sumbol) cua ma phep toan ( operation code = OPCODE) .ASM se chuyen ky hieu ma phep toan thanh ma may . Thong thng ky hieu ma phep toan mo ta chc nang cua phep toan , v du ADD , SUB , INC , DEC , INT ... oi vi ch dan cua ASM , trng toan t cha mot opcode gia (pseudo operation code = pseudo-op) . ASM khong chuyen pseudo-op thanh ma may ma hng dan ASM thc hien mot viec g o v du tao ra mot thu tuc , nh ngha cac bien ... 1.1.3 Trng cac toan hang ( operand(s) field) Trong mot lenh trng toan hang ch ra cac so lieu tham gia trong lenh o. Mot lenh co the khong co toan hang , co 1 hoac 2 toan hang . V du : NOP ; khong co toan hang INC AX ; 1 toan hang ADD WORD1,2 ; 2 toan hang cong 2 vi noi dung cua t nh WORD1 Trong cac lenh 2 toan hang toan hang au la toan hang ch ( destination operand) . Toan hang ch thng lathanh ghi hoac v tr nh dung e lu tr ket qua . Toan hang th hai la toan hang nguon . Toan hang nguon thng khong b thay oi sau khi thc hien lenh . oi vi mot ch dan cua ASM , trng toan hang cha mot hoac nhieu thong tin ma ASM dung e thc thi ch dan . 1.1.4 Trng chu thch ( comment field) Trng chu thch la mot tuy chon cua menh e trong ngon ng ASM . Lap trnh vien dung trng chu thch e thuyet minh ve cau lenh . ieu nay la can thiet v ngon ng ASM la ngon ng cap thap ( low level) v vay se rat kho hieu chng trnh neu no khong c chu thch mot cach ay u va ro rang . Tuy nhien khong nen co chu thch oi vi moi dong cua chng trnh , ke ca nnhng lenh ma y ngha cua no a rat ro rang nh : NOP ; khong lam chi ca Ngi ta dung dau cham phay (;) e bat au trng chu thch . ASM cung cho phep dung toan bo mot dong cho chu thch e tao mot khoang trong ngan cach cac phan khac nhau cua chng trnh ,v du : ; ; khi tao cac thanh ghi ; MOV AX,0 MOV BX,0 1.2 Cac kieu so lieu trong chng trnh hp ng

e cng bai giang HP NG

CPU ch lam viec vi cac so nh phan . V vay ASM phai chuyen tat ca cac loai so lieu thanh so nh phan . Trong mot chng trnh hp ng cho phep bieu dien so lieu di dang nh phan , thap phan hoac thap luc phan va tham ch la ca ky t na . 1.2.1 Cac so Mot so nh phan la mot day cac bit 0 va 1 va 2phai ket thuc bang h hoac H Mot so thap phan la mot day cac ch so thap phan va ket thuc bi d hoac D ( co the khong can) Mot so hex phai bat au bi 1 ch so thap phan va phai ket thuc bi h hoac H. Sau ay la cac bieu dien so hp le va khong hp le trong ASM : So Loai 10111 thap phan 10111b nh phan 64223 thap phan -2183D thap phan 1B4DH hex 1B4D so hex khong hp le FFFFH so hex khong hp le 0FFFFH so hex 1.2.2 Cac ky t Ky t va mot chuoi cac ky t phai c ong gia hai dau ngoac n hoac hai dau ngoac kep . V du A va HELLO . Cac ky t eu c chuyen thanh ma ASCII bi ASM . Do o trong mot chng trnh ASM se xem khai bao A va 41h ( ma ASCII cua A) la giong nhau .

1.3 Cac bien ( variables) Trong ASM bien ong vai tro nh trong ngon ng cap cao . Moi bien co mot loai d lieu va no c gan mot a ch bo nh sau khi dch chng trnh . Bang sau ay liet ke cac toan t gia dung e nh ngha cac loai so lieu . PSEUDO-OP STANDS FOR DB define byte DW define word ( doublebyte) DD define doubeword ( 2 t lien tiep) DQ define quadword ( 4 t lien tiep ) DT define tenbytes ( 10 bytes lien tiep) 1.3.1. Bien byte

e cng bai giang HP NG

Ch dan cua ASM e nh ngha bien byte co dang nh sau : NAME DB initial_value V du : ALPHA DB 4 Ch dan nay se gan ten ALPHA cho mot byte nh trong bo nh ma gia tr ban au cua no la 4 . Neu gia tr cua byte la khong xac nh th at dau cham hoi ( ?) vao gia tr ban au . V du : BYT DB ? oi vi bien byte vung gia tr kha d ma no lu tr c la -128 en 127 oi vi so co dau va 0 en 255 oi vi so khong dau . 1.3.2 Bien t Ch dan cua ASM e nh ngha mot bien t nh sau : NAME DW initial_value V du : WRD DW -2 Cung co the dung dau ? e thay the cho bien t co gia tr khong xac nh . Vung gia tr cua bien t la -32768 en 32767 oi vi so co dau va 0 en 56535 oi vi so khong dau . 1.3.3 Mang ( arrays) Trong ASM mot mang la mot loat cac byte nh hoac t nh lien tiep nhau . V du e nh ngha mot mang 3 byte goi la B_ARRAY ma gia tr ban au cua no la 10h,20h va 30h chung ta co the viet : B_ARRAY DB 10h,20h,30h B_ARRAY la ten c gan cho byte au tien B_ARRAY+1 la ten cua byte th hai B_ARRAY+2 la ten cua byte th ba Neu ASM gan a ch offset la 0200h cho mang B_ARRAY th noi dung bo nh se nh sau : SYMBOL B_ARRAY B_ARRAY+1 B_ARRAY+2 ADDRESS 200h 201h 202h CONTENTS 10h 20h 30h

Ch dan sau ay se nh ngha mot mang 4 phan t co ten la W_ARRAY: W_ARRAY DW 1000,40,29887,329

e cng bai giang HP NG Gia s mang bat au tai 0300h th bo nh se nh sau: SYMBOL ADDRESS CONTENTS W_ARRAY 300h 1000d W_ARRAY+2 302h 40d W_ARRAY+4 304h 29887d W_ARRAY+6 306h 329d

Byte thap va byte cao cua mot t oi khi chung ta can truy xuat ti byte thap va byte cao cua mot bien t . Gia s chung ta nh ngha : WORD1 DW 1234h Byte thap cua WORD1 cha 34h , con byte cao cua WORD1 cha 12h Ky hieu a ch cua byte thap la WORD1 con ky hieu a ch cua byte cao la WORD1+1 . Chuoi cac ky t ( character strings) Mot mang cac ma ASCII co the c nh ngha bang mot chuoi cac ky t V du : LETTERS DW 41h,42h,43h tng ng vi LETTERS DW ABC Ben trong mot chuoi , ASM se phan biet ch hoa va ch thng . V vay chuoi abc se c chuyen thanh 3 bytes : 61h ,62h va 63h. Trong ASM cung co the to hp cac ky t va cac so trong mot nh ngha . V du : MSG DB HELLO, 0AH, 0DH, $ tng ng vi MSG DB 48H,45H,4CH,4Ch,4FH,0AH,0DH,24H 1.4 Cac hang ( constants) Trong mot chng trnh cac hang co the c at ten nh ch dan EQU (equates) . Cu phap cua EQU la : NAME EQU constant v du : LF EQU 0AH sau khi co khai bao tren th LF c dung thay cho 0Ah trong chng trnh . V vay ASM se chuyen cac lenh : MOV DL,0Ah va MOV DL,LF thanh cung mot ma may .

e cng bai giang HP NG Cung co the dung EQU e nh ngha mot chuoi , v du: PROMPT EQU TYPE YOUR NAME Sau khi co khai bao nay , thay cho MSG DB TYPE YOUR NAME chung ta co the viet MSG DB PROMPT 1.5 Cac lenh c ban

CPU 8086 co hang tram lenh , trong chng nay ,chung ta se xem xet 7 lenh n gian cua 8086 ma chung thng c dung vi cac thao tac di chuyen so lieu va thc hien cac phep toan so hoc . Trong phan sau ay , WORD1 va WORD2 la cac bien t , BYTE1 va BYTE2 la cac bien byte . 1.5.1 Lenh MOV va XCHG Lenh MOV dung e chuyen so lieu gia cac thanh ghi , gia 1 thanh ghi va mot v tr nh hoac e di chuyen trc tiep mot so en mot thanh ghi hoac mot v tr nh . Cu phap cua lenh MOV la : MOV Destination , Source Sau ay la vai v du : MOV AX,WORD1 ; lay noi dung cua t nh WORD1 a vao thanh ghi AX MOV AX,BX ; AX lay noi dung cua BX , BX khong thay oi MOV AH,A ; AX lay gia tr 41h Bang sau cho thay cac trng hp cho phep hoac cam cua lenh MOV Destination operand Segment Reg Memory Location Y Y NO Y Y NO NO Y

source operand General Reg Segment Reg MemoryLocation Constant

General Reg Y Y Y Y

Constant NO NO NO NO

Lenh XCHG ( Exchange) dung e trao oi noi dung cua 2 thanh ghi hoac cua mot thanh ghi va mot v tr nh . V du : XCHG AH,BL XCHG AX,WORD1 ; trao oi noi dung cua thanh ghi AX va t nh WORD1. Cung nh lenh MOV co mot so han che oi vi lenh XCHG nh bang sau :

e cng bai giang HP NG Destination operand General Memory Locatin Register Y Y Y No

Source operand General Memory Memory Location

1.5.2 Lenh ADD, SUB, INC , DEC Lenh ADD va SUB c dung e cong va tr noi dung cua 2 thanh ghi , cua mot thanh ghi va mot v tr nh , hoac cong ( tr) mot so vi (khoi) mot thanh ghi hoac mot v tr nh . Cu phap la : ADD Destination , Source SUB Destination , Source V du : ADD WORD1, AX ADD BL , 5 SUB AX,DX ; AX=AX-DX V ly do ky thuat , lenh ADD va SUB cung b mot so han che nh bang sau: Destination operand General Reg Memory Loacation Y Y Y NO Y Y

Source operand Gen Memory Memory Location Constant

Viec cong hoac tr trc tiep gia 2 v tr nh la khong c phep . e giai quyet van e nay ngi ta phai di chuyen byte ( t ) nh en mot thanh ghi sau o mi cong hoac tr thanh ghi nay vi mot byte ( t ) nh khac . V du: MOV AL, BYTE2 ADD BYTE1, AL Lenh INC ( incremrent) e cong them 1 vao noi dung cua mot thanh ghi hoac mot v tr nh . Lenh DEC ( decrement) e giam bt 1 khoi mot thanh ghi hoac 1 v tr nh . Cu phap cua chung la : INC Destination DEC Destination V du : INC WORD1 INC AX DEC BL

e cng bai giang HP NG

1.5.3 Lenh NEG ( negative) Lenh NEG e oi dau ( lay bu 2 ) cua mot thanh ghi hoac mot v tr nh . Cu phap : NEG destination V du : NEG AX ; Gia s AX=0002h sau khi thc hien lenh NEG AX th AX=FFFEh LU Y : 2 toan hang trong cac lenh tren ay phai cung loai ( cung la byte hoac t ) 1.6 Chuyen ngon ng cap cao thanh ngon ng ASM

Gia s A va B la 2 bien t . Chung ta se chuyen cac menh e sau trong ngon ng cap cao ra ngon ng ASM . 1.6.1 Menh e B=A MOV AX,A MOV B,AX 1.6.2 Menh e A=5-A MOV AX,5 SUB AX,A MOV A,AX cach khac : NEG A ADD A,5 1.6.3 Menh e A=B-2*A MOV AX,B SUB AX,A SUB AX,A MOV A,AX ; a A vao AX ; a AX vao B ; a 5 vao AX ; AX=5-A ; A=5-A ;A=-A ;A=5-A ;Ax=B ;AX=B-A ;AX=B-2*A ;A=B-2*A

1.7 Cau truc cua mot chng trnh hp ng Mot chng trnh ngon ng may bao gom ma ( code) , so lieu ( data) va ngan xep (stack ) . Moi mot phan chiem mot oan bo nh . Moi mot oan chng trnh la c chuyen thanh mot oan bo nh bi ASM . 1.7.1 Cac kieu bo nh ( memory models) o ln cua ma va so lieu trong mot chng trnh c quy nh bi ch dan MODEL nham xac nh kieu bo nh dung vi chng trnh . Cu phap cua ch dan MODEL nh sau : .MODEL memory_model Bang sau cho thay cac kieu bo nh :

e cng bai giang HP NG

MODEL SMALL MEDIUM COMPACT LARGE HUGE

DESCRITION code va data nam trong 1 oan code nhieu hn 1 oan , data trong 1 oan data nhieu hn 1 oan , code trong 1 oan code va dayta ln hn 1 oan , array khong qua 64KB code ,data ln hn 1 oan , array ln hn 64KB

1.7.2 oan so lieu oan so lieu cua chng trnh cha cac khai bao bien , khai bao hang ... e bat au oan so lieu chung ta dung ch dan DATA vi cu phap nh sau : .DATA ;khai bao ten cac bien , hang va mang v du : .DATA WORD1 DW 2 WORD2 DW 5 MSG DB THIS IS A MESSAGE MASK EQU 10010010B 1.7.3 oan ngan xep Muc ch cua viec khai bao oan ngan xep la danh mot vung nh ( vung satck) e lu tr cho stack . Cu phap cua lenh nh sau : .STACK size neu khong khai bao size th 1KB c danh cho vung stack . .STACK 100h ; danh 256 bytes cho vung stack 1.7.4 oan ma oan ma cha cac lenh cua chng trnh . Bat au oan ma bang ch dan CODE nh sau : .CODE Ben trong oan ma cac lenh thng c to chc thanh thu tuc (procedure) ma cau truc cua mot thu tuc nh sau : name PROC ; body of the procedure name ENDP Sau ay la cau truc cua mot chng trnh hp ng ma phan CODE la thu tuc co ten la MAIN

e cng bai giang HP NG

10

.MODEL SMALL .STACK 100h .DATA ; nh ngha so lieu tai ay .CODE MAIN PROC ;than cua thu tuc MAIN MAIN ENDP ; cac thu tuc khac neu co END MAIN

1.8 Cac lenh vao ra


CPU thong tin vi cac ngoai vi thong qua cac cong IO . Lenh IN va OUT cua CPU cho phep truy xuat en cac cong nay . Tuy nhien hau het cac ng dung khong dung lenh IN va OUT v 2 ly do: cac a ch cong thay oi tuy theo loai may tnh co the lap trnh cho cac IO de dang hn nh cac chng trnh con ( routine) c cung cap bi cac hang che tao may tnh Co 2 loai chng trnh phuc vu IO la : cac routine cua BIOS ( Basic Input Output System) va cac routine cua DOS . Lenh INT ( interrupt) e goi cac chng trnh con cua BIOS va DOS co the dung lenh INT vi cu phap nh sau : INT interrupt_number ay interrupt_number la mot so ma no ch nh mot routine . V du INT 16h goi routine thc hien viec nhap so lieu t Keyboard .

1.8.1 Lenh INT 21h


INT 21h c dung e goi mot so ln cac cac ham ( function) cua DOS . Tuy theo gia tr ma chung ta at vao thanh ghi AH , INT 21h se goi chay mot routine tng ng . Trong phan nay chung ta se quan tam en 2 ham sau ay :

e cng bai giang HP NG FUNCTION NUMBER 1 2 ROUTINE Single key input Single character output

11

FUNTION 1 : Single key input Input : AH=1 Output:AL= ASCII code if character key is pressed AL=0 if non character key is pressed e goi routine nay thc hien cac lenh sau : MOV AH,1 ; input key function INT 21h ; ASCII code in AL and display character on the screen

FUNTION 2 : Display a character or execute a control function Input : AH=2 DL=ASCII code of the the display character or control character Output:AL= ASCII code of the the display character or control character Cac lenh sau se in len man hnh dau ? MOV AH,2 MOV DL,? ; character is ? INT 21H ; display character Ham 2 cung co the dung e thc hien chc nang ieu khien .Neu DL cha ky t ieu khien th khi goi INT 21h , ky t ieu khien se c thc hien . Cac ky t ieu khien thng dung la : ASCII code (Hex) 7 8 9 A D SYMBOL BEL BS HT LF CR FUNCTION beep backspace tab line feed carriage return

1.9 Chng trnh au tien Chung ta se viet mot chng trnh hp ng nham oc mot ky t t ban phm va in no tren au dong mi . TITLE PGM1: ECHO PROGRAM

e cng bai giang HP NG .MODEL SMALL .STACK 100H .CODE MAIN PROC ; display dau nhac MOV AH,2 MOV DL,? INT 21H ; nhap 1 ky t MOV AH,1 ; ham oc ky t INT 21H ; ky t c a vao AL MOV BL,AL ; cat ky t trong BL ; nhay en dong mi MOV AH,2 ; ham xuat 1 ky t MOV DL,0DH ; ky t carriage return INT 21H , thc hien carriage return MOV DL,0AH ; ky t line feed INT 21H ; thc hien line feed ; xuat ky t MOV DL,BL ; a ky t vao DL INT 21H ; xuat ky t ; tr ve DOS MOV AH,4CH ; ham thoat ve DOS INT 21H ; exit to DOS MAIN ENDP END MAIN

12

1.10 Tao ra va chay mot chng trnh hp ng


Co 4 bc e tao ra va chay mot chng trnh hp ng la : Dung mot trnh soan thao van ban e tao ra tap tin chng trnh nguon ( source program file ) . Dung mot trnh bien dch (Assembler ) e tao ra tap tin oi tng (object file) ngon ng may Dung trnh LINK e lien ket mot hoac nhieu tap tin oi tng roi tao ra file thc thi c . Cho thc hien tap tin EXE hoac COM . Bc 1 : Tao ra chng trnh nguon

e cng bai giang HP NG

13

Dung mot trnh soan thao van ban (NC chang han) e tao ra chng trnh nguon .V du lat ten la PGM1.ASM. Phan m rong ASM la phan m rong quy c e Assembler nhan ra chng trnh nguon . Bc 2 :Bien dch chng trnh Chung ta se dung MASM ( Microsoft Macro Assembler ) e chuyen tap tin nguon PGM1.ASM thanh tap tin oi tng ngon ng may go la PGM1.OBJ bang lenh sau : MASM PGM1; Sau khi in thong tin ve ban quyen MASM se kiem tra file nguon e tm loi cu phap . Neu co loi th MASM se inra so dong b loi va mot mo ta ngan ve loi o . Neu khong co loi th MASM se chuyen PGM1.ASM thanh tao tin oi tng ngon ng may goi la PGM1.OBJ . Dau cham phay sau lenh MASM PGM1 co ngha la chung ta khong muon tao ra mot tap tin oi t ng co ten khac vi PGM1 . Neu khong co dau cham phay sau lenh th MASM se yeu cau chung ta go vao ten cua mot so tap tin ma no co the tao ra nh hnh di ay : Object file name [ PGM1.OBJ]: Source listing [NUL.LIST] : PGM1 Cross-reference [NUL.CRF] : PGM1 Ten mac nhien la NUL co ngha la khong tao ra file tng ng tr khi lap trnh vien go vao ten tap tin . Tap tin danh sach nguon ( source listing file) : la mot tap tin Text co anh so dong , trong o ma hp ng va ma nguon nam canh nhau . Tap tin nay thng dung e g roi chng trnh nguon v MASM thong bao loi theo so dong . Tap tin tham chieu cheo ( Cross -Reference File ) : la 1 tap tin cha danh sach cac ten ma chung xuat hien trong chng trnh kem theo so dong ma ten ay xuat hien . Tap tin nay oc dung e tm cac bien va nhan trong mot chng trnh ln . Bc 3 : Lien ket chng trnh Tap tin oi tng tao ra bc 2 la mot tap tin ngon ng may nhng no khong chay c v cha co dang thch hp cua 1 file chay . Hn na no cha biet chng trnh c nap vao v tr nao tren bo nh e chay . Mot so a ch di dang ma may co the b thieu . Trnh LINK se lien ket mot hoac nhieu file oi tng thanh mot file chay duy nhat ( *.EXE ) .Tap tin nay co the c nap vao bo nh va thi hanh .

e cng bai giang HP NG e lien ket chng trnh ta go : LINK PGM1; Neu khong co dau cham phay ASM se yeu cau chung ta go vao ten tap tin thc thi . Bc 4 : Chay chng trnh T dau nhac lenh co the chay chng trnh bang cach go ten no roi nhan ENTER . 1.11 Xuat mot chuoi ky t

14

Trong chng trnh PGM1 tren ay chung ta a dung INT 21H ham 2 va 4 e oc va xuat mot ky t . Ham 9 ngat 21H co the dung e xuat mot chuoi ky t . INT 21H , Function 9 : Display a string Input : DX=offset address of string The string must end with a $ character Ky t $ cuoi chuoi se khong c in len man hnh . Neu chuoi co cha ky t ieu khien th chc nang ieu khien tng ng se c thc hien . Chung ta se viet 1 chng trnh in len man hnh chuoi HELLO! . Thong iep HELLO c nh ngha nh sau trong oan so lieu : MSG DB HELLO!$

Lenh LEA ( Load Effective Address ) LEA destnation , source

Ngat 21h , ham so 9 se xuat mot chuoi ky t ra man hnh vi ieu kien a ch hieu dung cua bien chuoi phai tren DX . Co the thc hien ieu nay bi lenh : LEA DX,MSG ; a a ch offset cua bien MSG vao DX Program Segment Prefix ( PSP ) : Phan au cua oan chng trnh Khi mot chng trnh c nap vao bo nh may tnh , DOS danh ra 256 byte cho cai goi la PSP . PSP cha mot so thong tin ve chng trnh ang c nap trong bo nh . e cho cac chng trnh co the truy xuat ti PSP , DOS at so phan oan cua no (PSP) trong ca DS va ES trc khi thc thi chng trnh . Ket qua la thanh ghi DS khong cha so oan cua oan so lieu cua chng trnh . e khac phuc ieu nay , mot chng trnh co cha oan so lieu phai c bat au bi 2 lenh sau ay : MOV AX,@DATA

e cng bai giang HP NG MOV DS,AX ay @DATA la ten cua oan so lieu c nh ngha bi DATA . Assembler se chuyen @DATA thanh so oan . Sau ay la chng trnh hoan chnh e xuat chuoi ky t HELLO! TITLE PGM2: PRINT STRING PROGRAM .MODEL SMALL .STACK 100H .DATA MSG DB HELLO!$ .CODE MAIN PROC ; initialize DS MOV AX,@DATA MOV DS,AX ; display message LEA DX,MSG MOV AH,9 INT 21H ; return to DOS MOV AH,4CH INT 21H MAIN ENDP END MAIN

15

1.12 Chng trnh oi ch thng sang ch hoa Chung ta se viet 1 chng trnh yeu cau ngi dung go vao mot ky t bang ch thng . Chng trnh se oi no sang dang ch hoa roi in ra dong tiep theo . TITLE .MODEL .STACK .DATA CR LF MSG1 MSG2 PGM3: CASE COVERT PROGRAM SMALL 100H EQU EQU DB DB 0DH 0AH ENTER A LOWER CASE LETTER:$ 0DH,0AH,IN UPPER CASE IT IS :

e cng bai giang HP NG CHAR DB ?,$

16 ; nh ngha bien CHAR co gia tr ban au cha ;xac nh

.CODE MAIN PROC ; INITIALIZE DS MOV AX,@DATA MOV DS,AX ;PRINT PROMPT USER LEA DX,MSG1 ; lay thong iep so 1 MOV AH,9 INT 21H ; xuat no ra man hnh ;nhap vao mot ky t thng va oi no thanh ky t hoa MOV AH,1 ; nhap vao 1 ky t INT 21H ; cat no trong AL SUB AL,20H ; oi thanh ch hoa va cat no trong AL MOV CHAR, AL ; cat ky t trong bien CHAR ; xuat ky t tren dong tiep theo LEA DX, MSG2 ; lay thong iep th 2 MOV AH,9 INT 21H ; xuat chuoi ky t th hai , v MSG2 khong ket ;thuc bi ky t $ nen no tiep tuc xuat ky t co trong bien CHAR ;dos exit MOV AH,4CH INT 21H ; dos exit MAIN ENDP END MAIN

e cng ba i gia n g H p ng

17

Chng 2 : Trang thai cua vi x ly va cac thanh ghi c

Trong chng nay chung ta se xem xet cac thanh ghi c cua vi x ly va anh hng cua cac lenh may en cac thanh ghi c nh the nao . Trang thai cua cac thanh ghi la can c e chng trnh co the thc hien lenh nhay , re nhanh va lap . Mot phan cua chng nay se gii thieu chng trnh DEBUG cua DOS . 2.1 Cac thanh ghi c ( Flags register) iem khac biet quan trong cua may tnh so vi cac thiet b ien t khac la kha nang cho cac quyet nh . Mot mach ac biet trong CPU co the lam cac quyet nh nay bang cach can c vao trang thai hien hanh cua CPU . Co mot thanh ghi ac biet cho biet trang thai cua CPU o la thanh ghi c . Bang 2.1 cho thay thanh ghi c 16 bit cua 8086 11 10 9 8 O D IF T F F F 7 S F 6 Z F 5 4 3 A F 2 P F 1 0 C F

Bang 2.1 :Thanh ghi c cua 8086

e cng ba i gia n g H p ng

18

Muc ch cua cac thanh ghi c la ch ra trang thai cua CPU .Co hai loai c la c trang thai ( status flags) va c ieu khien (control flags) . C trang thai phan anh cac ket qua thc hien lenh cua CPU . Bang 2.2 ch ra ten va ky hieu cac thanh ghi c trong 8086 . Bit 0 2 4 6 7 11 8 9 10 Name Carry flag Parity flag Auxiliary carry flag Zero flag Sign flag Overflow flag Trap flag Interrrupt flag Direction flag Symbol CF PF AF ZF SF OF TF IF DF

Bang 2.2 : Cac c cua 8086 Moi bit tren thanh ghi c phan anh 1 trang thai cua CPU . Cac c trang thai ( status flags)

e cng ba i gia n g H p ng

19

Cac c trang thai phan anh ket qua cua cac phep toan . V du sau khi thc hien lenh SUB AX,AX c ZF =1 , ngha la ket qua cua phep tr la zero . C nh ( Carry Flag - CF) : CF=1 neu xuat hien bit nh (carry) t v tr MSB trong khi thc hien phep cong hoac co bit mn ( borrow ) tai MSB trong khi thc hien phep tr . Trong cac trng hp khac CF=0 . C CF cung b anh hng bi lenh dch ( Shift) va quay ( Rotate) so lieu . C chan le ( Parity Flag - PF) : PF=1 neu byte thap cua ket qua co tong so con so 1 la mot so chan ( even parity). PF=0 neu byte thap la chan le le (old parity ). V du neu ket qua la FFFEh th PF=0 C nh phu ( Auxiliary Carry Flag - AF ) :AF =1 neu co nh ( mn) t bit th 3 trong phep cong ( tr) . C Zero ( Zero Flag -ZF) : ZF=1 neu ket qua la so 0 . C dau ( Sign Flag - SF ) : SF=1 neu MSB cua ket qua la 1 ( ket qua la so am ) . SF=0 neu MSB=0 C tran ( Overflow Flag - OF ) : OF=1 neu xay ra tran so trong khi thc hien cac phep toan . Sau ay chung ta se phan tch cac trng hp xay ra tran trong khi thc hien tnh toan . Hien tng tran so lien quan en viec bieu dien so trong may tnh vi mot so hu han cac bit . Cac so thap phan co dau bieu dien bi 1 byte la 128 en +127 . Neu bieu dien bang 1 t (16 bit) th cac so thap phan co the bieu dien la -32768 en +32767 . oi vi cac so khong dau , dai cac so co the bieu dien trong

e cng ba i gia n g H p ng

20

mot t la 0 en 65535 , trong mot byte la 0 en 255 . Neu ket qua cua mot phep toan vt ra ngoai dai so co the bieu dien th xay ra s tran so . Khi co s tran so ket qua thu c se b sai . 2.2 Tran ( overflow) Co 2 loai tran so : Tran co dau ( signed overflow) va tran khong dau ( unsigned overflow) . Khi thc hien phep cong so hoc chang han phep cong , se xay ra 4 kha nang sau ay : 1) khong tran 2) ch tran dau 3) ch tran khong dau 4) tran ca dau va khong dau V du cua tran khong dau la phep cong ADD AX,BX vi AX=0FFFFh , BX=0001h .Ket qua di dang nh phan la :

1111 1111 1111 1111 0000 0000 0000 0001 10000 0000 0000 0000 Neu dien giai ket qua di dang khong dau th ket qua la ung ( 10000h=65536) . Nhng ket qua a vt qua o ln cua t nh . Bit 1 ( bit nh t v tr

e cng ba i gia n g H p ng

21

MSB ) a xay ra va ket qua tren AX =0000h la sai . S tran nh the la tran khong dau . Neu xem rang phep cong tren ay la phep cong hai so co dau th ket qua tren AX = 0000h la ung , v FFFFh = -1 , con 0001h = +1 , do o ket qua phep cong la 0 . Vay trong trng hp nay s tran dau khong xay ra . V du ve s tran dau : gia s AX = BX = 7FFFh , lenh ADD AX,BX se cho ket qua nh sau : 0111 1111 1111 1111 0111 1111 1111 1111 1111 1111 1111 1110 = FFFE h Bieu dien co dau va khong dau cua 7FFFh la 3276710 . Nh vay la oi vi phep cong co dau cung nh khong dau th ket qua van la 32767 + 32767 = 65534 . So nay(65534) a vt ngoai dai gia tr ma 1 so 16 bit co dau co the bieu dien . Hn na FFFEh = -2 . Do vay s tran dau a xay ra . Trong trng hp xay ra tran , CPU se bieu th s tran nh sau : CPU se set OF =1 neu xay ra tran dau CPU se set CF = 1 neu xay ra tran khong dau Sau khi co tran , mot chng trnh hp ly se c thc hien e sa sai ket qua ngay lap tc . Cac lap trnh vien se ch phai quan tam ti c OF hoac CF neu bieu

e cng ba i gia n g H p ng

22

dien so cua ho la co dau hay khong dau mot cach tng ng . Vay th lam the nao e CPU biet c co tran ? Tran khong dau se xay ra khi co mot bit nh ( hoac mn ) t MSB Tran dau se xay ra trong cac trng hp sau : a) Khi cong hai so cung dau , s tran dau xay ra khi tong co dau khac vi hai toan hang ban au . Trong v du 2 , cong hai so 7FFFh +7FFFh ( hai so dng ) nhng ket qua la FFFFh ( so am) b) Khi tr hai so khac dau ( giong nh cong hai so cung dau) ket qua phai co dau hp ly .Neu ket qua cho dau khong nh mong i th co ngha la a xay ra s tran dau . V du 8000h - 0001h = 7FFFh ( so dng ) . Do o OF=1 . Vay lam the nao e CPU ch ra rang co tran ? OF=1 neu tran dau CF=1 neu tran khong dau Lam the nao e CPU biet la co tran ? Tran khong dau xay ra khi co so nh ( carry) hoac mn ( borrow) t MSB Tran dau xay ra khi cong hai so cung dau ( hoac tr 2 so khac dau ) ma ket qua vi dau khac vi dau mong i . Phep cong hai so co dau khac nhau khong the xay ra s tran . Tren thc te CPU dung phng phap sau : c OF=1 neu so nh vao va so nh ra t MSB la khong phu hp :

e cng ba i gia n g H p ng

23

ngha la co nh vao nhng khong co nh ra hoac co nh ra nhng khong co nh vao .

C ieu khien ( control flags) Co 3 c ieu khien trong CPU , o la : C hng ( Direction Flag = DF) C bay ( Trap flag = TF) C ngat ( Interrupt Flag = IF) Cac c ieu khien c dung e ieu khien hoat ong cua CPU C hng (DF) c dung trong cac lenh x ly chuoi cua CPU . Muc ch cua DF la dung e ieu khien hng ma mot chuoi c x ly . Trong cac lenh x ly chuoi hai thanh ghi DI va SI c dung e a ch bo nh cha chuoi . Neu DF=0 th lenh x ly chuoi se tang a ch bo nh sao cho chuoi c x ly t trai sang phai Neu DF=1 th a ch bo nh se c x ly theo hng t phai sang trai . 2.3 Cac lenh anh hng e c nh the nao Tai mot thi iem , CPU thc hien 1 lenh , cac c lan lt phan anh ket qua thc hien lenh . D nhien co mot so lenh khong lam thay oi mot c nao ca hoac thay oi ch 1 vai c hoac lam cho mot vai c co trang thai

e cng ba i gia n g H p ng

24

khong xac nh . Trong phan nay chung ta ch xet anh hng cua cac lenh ( a nghien cu chng trc ) len cac c nh the nao . Bang sau ay cho thay anh hng cua cac lenh en cac c : INSTRUCTION MOV/XCHG ADD/SUB INC/DEC NEG AFFECTS FLAGS

NONE ALL ALL tr CF ALL (CF=1 tr khi ket qua bang 0 , OF=1 neu ket qua la 8000H )

e thay ro anh hng cua cac lenh len cac c chung ta se lay vai v du . V du 1 : ADD AX,AX trong o AX=BX=FFFFh FFFFh + FFFFh 1FFFEh Ket qua cha tren AX la FFFEh = 1111 1111 1111 1110

e cng ba i gia n g H p ng

25

SF=1 v MSB=1 PF=0 v co 7 ( le) so 1 trong byte thap cua ket qua ZF=0 v ket qua khac 0 CF=1 v co nh 1 t MSB OF=0 v dau cua ket qua giong nh dau cua 2 so hang ban au . V du 2 : ADD AL,BL trong o AL= BL= 80h 80h + 80h 100h Ket qua tren AL = 00h SF=0 v MSB=0 PF=1 v tat ca cac bit eu bang 0 ZF=1 v ket qua bang 0 CF=1 v co nh 1 t MSB OF=1 v ca 2 toan hang la so am nhng ket qua la so dng ( co nh ra t MSB nhng khong co nh vao ) . V du 3 : SUB AX,BX trong o AX=8000h va BX= 0001h 8000h - 0001h

e cng ba i gia n g H p ng

26

7FFFFh = 0111 1111 1111 1111 SF=0 v MSB=0 PF=1 v co 8 ( chan ) so 1 trong byte thap cua ket qua ZF=0 v ket qua khac 0 CF=0 v khong co mn OF=1 v tr mot so am cho 1 so dng ( tc la cong 2 so am ) ma ket qua la mot so dng . V du 4 : INC AL trong o AL=FFh Ket qua tren AL=00h = 0000 0000 SF=0 v MSB=0 PF=1 ZF=1 v ket qua bang 0 CF khong b anh hng bi lenh INC mac du co nh 1 t MSB OF=0 v hai so khac dau c cong vi nhau ( co so nh vao MSB va cung co so nh ra t MSB) V du 5: MOV AX,-5 Ket qua tren BX = -5 = FFFBh Khong co c nao anh hng bi lenh MOV

e cng ba i gia n g H p ng

27

V du 6: NEG AX trong o AX=8000h 8000h =1000 0000 0000 0000 bu 1 =0111 1111 1111 1111 +1 1000 0000 0000 0000 = 8000h Ket qua tren AX=8000h SF=1 v MSB=1 PF=1 v co so chan con so 1 trong byte thap cua ket qua ZF=0 v ket qua khac 0 CF=1 v lenh NEG lam cho CF=1 tr khi ket qua bang 0 OF=1 v dau cua ket qua giong vi dau cua toan hang nguon . 2.4 Chng trnh DEBUG.EXE Debug la mot chng trnh cua DOS cho phep chay th cac chng trnh hp ng . Ngi dung co the cho chay chng trnh tng lenh 1 t au en cuoi ,trong qua trnh o co the thay noi dung cac thanh ghi thay oi nh the nao . Debug cho phep nhap vao mot ma hp ng trc tiep sau o DEBUG se chuyen thanh ma may va lu tr trong bo nh . DEBUG cung cap kha nang xem noi dung cua tat ca cac thanh ghi co trong CPU.

e cng ba i gia n g H p ng

28

Sau ay chung ta se dung DEBUG e mo ta cach thc ma cac lenh anh hng en cac c nh the nao . Gia s chung ta co chng trnh hp ng sau :

TITLE PGM2_1: CHECK - FLAGS ; dung DEBUG e kiem tra cac c .MODEL SMALL .STACK 100H .CODE MOV AX,4000H ; AX=4000H ADD AX,AX ; AX=8000H SUB AX,0FFFFH ;AX=8001H NEG AX ; AX=7FFFH INC AX ; AX=8000H MOV AH,4CH ; HAM THOAT VE DOS INT 21H ; EXIT TO DOS END MAIN ENDP END MAIN

Sau khi dch chng trnh , gia s file chay la CHECKFL.EXE tren ng dan C:\ASM . e chay debug chung ta go lenh sau : C:\> DEBUG C:\ASM\CHECK-FL.EXE

e cng ba i gia n g H p ng

29

t luc nay tr i dau nhac lacua debug ( dau _) , ngi s dung co the a vao cac lenh debug t dau nhac nay . Trc het co the xem noi dung cac thanh ghi bang lenh R(Register) , man hnh se co noi dung nh sau : -R AX=0000 BX=0000 BP=0000 SI=0000 SS=0EE5 CS=0EE6 NV UP DI PL 0EE6:0000 B80040

CX=001F DI=0000 IP=0000 NZ NA MOV

DX=0000 SP=000A DS=0ED5 ES=0ED5 PO NC AX,4000

Chung ta thay ten cac thanh ghi va noi dung cua chung ( di dang HEX) tren 3 dong au . Dong th 4 la trang thai cac thanh ghi theo cach bieu th cua debug. Bang 2-3 la cach ma Debug bieu th trang thai cua cac thanh ghi c cua CPU . Flag s CF PF AF ZF SF OF DF IF Set (1) Symbol CY (carry) PE (even parity) AC ( auxiliary carry) ZR ( zero) NG ( negative) OV ( overflow) DN ( down) EI ( enable Clear (0) Symbol NC ( no carry) PO ( odd parity) NA ( no auxiliary carry) NZ ( non zero) PL ( plus) NV ( no overflow) UP ( up) DI ( disable

e cng ba i gia n g H p ng

30
interrupts)

interrupts)

Bang 2.3 : Bieu th trang trang cac c cua DEBUG Dong cuoi cung cho biet gia tr hien hanh cua PC (a ch cua lenh se c thc hien di dang a ch logic ) ma may cua lenh va noi dung cua lenh tng ng . Khi chay chng trnh nay tren 1 may tnh khac co the se thay mot ia ch oan khac . Chung ta se dung lenh T(Trace) e thi hanh tng lenh cua chng trnh bat au t lenh MOV AX,4000h -T AX=4000 BX=0000 BP=0000 SI=0000 SS=0EE5 CS=0EE6 NV UP DI PL 0EE6:0003 03C0

CX=001F DX=0000 SP=000A DI=0000 DS=0ED5 ES=0ED5 IP=0003 NZ NA PO NC ADD AX,AX

Sau khi thc hien lenh MOV AX,4000 cac c khong b thay oi , ch co AX=4000h . Bay gi chung ta thc hien lenh ADD AX,AX -T AX=8000 BX=0000 CX=001F BP=0000 SI=0000 DI=0000 SS=0EE5 CS=0EE6 IP=0005 OV UP DI NG NZ NA 0EE6:0005 2DFFFF SUB

DX=0000 SP=000A DS=0ED5 ES=0ED5 PE NC AX,FFFF

e cng ba i gia n g H p ng

31

Ket qua cua phep cong la 8000h , do o SF=1(NG) , OF=1(OV) va PF=1(PE) Bay gi chung ta thc hien lenh SUB AX,0FFFh -T AX=8001 BX=0000 CX=001F BP=0000 SI=0000 DI=0000 SS=0EE5 CS=0EE6 IP=0008 NV UP DI NG NZ AC 0EE6:0008 F7D8

DX=0000 SP=000A DS=0ED5 ES=0ED5 PO CY NEG AX

AX=8000H-FFFFH=8001H C OF=0(NV) nhng CF=1(CY) v co mn t MSB C PF=0(PO) v byte thap ch co 1 con so 1. Lenh tiep theo se la lenh NEG AX -T AX=7FFF BX=0000 BP=0000 SI=0000 SS=0EE5 CS=0EE6 NV UP DI PL 0EE6:000A 40

CX=001F DX=0000 SP=000A DI=0000 DS=0ED5 ES=0ED5 IP=000A NZ AC PE CY INC AX

AX lay bu 2 cua 8001h la 7FFFh . CF=1(CY) v lenh NEG cho ket qua khac 0. OF=0(NV) v ket qua khac 8000h Cuoi cung chung ta thc hien lenh INC AX

e cng ba i gia n g H p ng

32

-T AX=8000 BX=0000 CX=001F BP=0000 SI=0000 DI=0000 SS=0EE5 CS=0EE6 IP=000B OV UP DI NG NZ AC 0EE6:000B B44C

DX=0000 SP=000A DS=0ED5 ES=0ED5 PE CY MOV AH,4CH

OF=1(OV) v cong 2 so dng ma ket qua la 1 so am CF=1(CY) v lenh INC khong anh hng ti c nay . e thc hien toan bo chng trnh chung ta go G(Go) -G Program terminated normally e thoat kho debug go Q(Quit) -Q C:\> Bang sau ay cho biet mot so lenh debug thng dung , cac tham so e trong ngoac la tuy chon

COMMAND D(start (end) (range)) D 100 D CS:100 120 D( DUMP)

ACTION Liet ke noi dung cac byte di dang HEX Liet ke 80h bytes bat au t DS:100h Liet ke cac bytes t DS:100h en DS:120 Liet ke 80h bytes t byte cuoi cung a

e cng ba i gia n g H p ng

33

G(=start ) (addr1 addr2...addrn) G G=100 G=100 150 Q R(register) R R AX T(=start)(value) T T=100 T=100 5 T4

c hien th Chay ( go) lenh t v tr Start vi cac iem dng tai addr1,addr2,addrn Thc thi lenh t CS:IP en het Thc thi lenh t CS:100h en het Thc thi lenh tai CS:100h dng tai CS:150h Quit debug and return to DOS Xem/ thay oi noi dung cua thanh ghi Xem noi dung tat ca cac thnah ghi va c Xem va thay oi noi dung cua thanh ghi AX Quet value lenh t v tr start Trace lenh tai CS:IP Trace lenh tai CS:100h Trace 5 lenh bat au t CS:100h Trace 4 lenh bat au t CS:IP

U(start)(value) U CS:100 110 U 200 L 20 U A(start)

Unassemble vung a ch thanh lenh asm Unassemble t CS:100h en CS:110h Unassemble 20 lenh t CS:200h Unassemble 32 bytes t bytes cuoi cung c hien th a vao ma hp ng cho 1 a ch hoac 1

e cng ba i gia n g H p ng

34

vung ia ch A A CS:100h a vao ma hp ng tai CS:IP a vao ma hp ng tai CS:100h

Chng 3 : Cac lenh lap va re nhanh Chng 3 : CAC LENH IEU KHIEN

28

Mot chng trnh thong thng se thc hien lan lt cac lenh theo th th ma chung c viet ra . Tuy nhien trong mot vai trng hp can phai chuyen ieu khien en 1 phan khac cua chng trnh . Trong phan nay chung ta se nghien cu cac lenh nhay va lenh lap co tnh en cau truc cua cac lenh nay trong cac ngon ng cap cao .

3.1

V du ve lenh nhay

e hnh dung c lenh nhay lam viec nh the nao chung ta hay viet chng trnh in ra toan bo tap cac ky t IBM .

TITLE PGR3-1:IBM CHARACTER DISPLAY .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AH,2 ; ham xuat ky t MOV CX,256 ; so ky t can xuat MOV DL,0 ; DL gi ma ASCII cua ky t NUL ; PRINT_LOOP : INT 21H ;display character INC DL DEC CX JNZ PRINT_LOOP ;nhay en print_loop neu CX# 0 ;DOS EXIT MOV AH,4CH INT 21H MAIN ENDP END MAIN

Trong chng trnh chung ta a dung lenh ieu khien Jump if not zero (JNZ) e quay tr lai oan chng trnh xuat ky t co nhan a ch bo nh laPRINT_LOOP

Chng 3 : Cac lenh lap va re nhanh

29

3.2

Nhay co ieu kien

Lenh JNZ la mot lenh nhay co ieu kien .Cu phap cua mot lenh nhay co ieu kien la : Jxxx destination-label Neu ieu kien cua lenh c thoa man th lenh tai Destination-label se c thc hien , neu ieu kien khong thoa th lenh tiep theo lenh nhay se c thc hien. oi vi lenh JNZ th ieu kien la ket qua cua lenh trc no phai bang 0 . Pham vi cua lenh nhay co ieu kien . Cau truc ma may cua lenh nhay co ieu kien yeu cau destination-label en ( precede) lenh nhay phai khong qua 126 bytes . Lam the nao e CPU thc hien mot lenh nhay co ieu kien ? e thc hien mot lenh nhay co ieu kien CPU phai theo doi thanh ghi c. Neu ieu kien cho lenh nhay ( c bieu dien bi mot to hp trang thai cac c ) la ung th CPU se ieu chnh IP en destination-label sao cho lenh tai ia ch destination-label c thc hien .Neu ieu kien nhay khong thoa th IP se khong thay oi , ngha la lenh tiep theo lenh nhay se c thc hien . Trong chng trnh tren ay , CPU thc hien lenh JNZ PRINT_LOOP bang cach kham xet cac c ZF . Neu ZF=0 ieu khien c chuyen ti PRINT_LOOP. Neu ZF=1 lenh MOV AH,4CH se c thc hien . Bang 3-1 cho thay cac lenh nhay co ieu kien . Cac lenh nhay c chia thanh 3 loai : nhay co dau ( dung cho cac dien dch co dau oi vi ket qua) nhay khong dau (dung cho cac dien dch khong dau oi vi ket qua) nhay mot c ( dung cho cac thao tac ch anh hng len 1 c ) Mot so lenh nhay co 2 Opcode . Chung ta co the dung mot trong 2 Opcode , nhng ket qua thc hien lenh la nh nhau . Nhay co dau SYMBOL JG/JNLE DESCRITION jump if greater than jump if not less than or equal to jump if greater than or equal to jupm if not less or equal to jump if lees than jump if not greater or equal CONDITION FOR JUMPS ZF=0 and SF=OF

JGE/JNL

SF=OF

JL/JNGE

SF<>OF

Chng 3 : Cac lenh lap va re nhanh

30

JLE/JNG

jump if less than or equal jump if not greater

ZF=1 or SF<>OF

Nhay co ieu kien khong dau SYMBOL JA/JNBE DESCRITION CONDITION FOR JUMPS

jump if above CF=0 and ZF=0 jump if not below or equal jump if above or equal jump if not below CF=0

JAE/JNB

JB/JNA

jump if below Cf=1 jump if not above or equal jump if below or equal jump if not above CF=1 or ZF=1

JBE/JNA

Nhay 1 c SYMBOL JE/JZ DESCRITION jump if equal jump if equal to zero jump if not equal jump if not zero jump if carry jump if no carry jump if overflow jump if not overflow jump if sign negative DESCRITION CONDITION FOR JUMPS ZF=1

JNE/JNZ

ZF=0

JC JNC JO JNO JS SYMBOL

CF=1 CF=0 OF=1 OF=0 SF=1 CONDITION FOR JUMPS

Chng 3 : Cac lenh lap va re nhanh

31

JNS JP/JPE JNP/JPO

jump if nonnegative sign jump if parity even jump if parity odd

SF=0 PF=1 PF=0

Lenh CMP ( Compare) Cac lenh nhay thng lay ket qua cua lenh Compare nh la ieu kien . Cu phap cua lenh CMP la : CMP destination, source Lenh nay so sanh toan hang nguon va toan hang ch bang cach tnh hieu Destinaition - Source . Ket qua se khong c cat gi . Nh vay la lenh CMP giong nh lenh SUB , ch khac la trong lenh CMP toan hang ch khong thay oi . Gia s chng trnh cha cac lenh sau : CMP AX,BX ;trong o AX=7FFF va BX=0001h JG BELOW Ket qua cua lenh CMP AX,BX la 7FFEh . Lenh JG c thoa man v ZF=0=SF=OF do o ieu khien c chuyen en nhan BELOW. Dien dch lenh nhay co ieu kien V du tren ay ve lenh CMP cho phep lenh nhay sau no chuyen ieu khien en nhan BELOW . ay la v du cho thay CPU thc hien lenh nhay nh the nao . Chung thc hien bang cach kham xet trang tha cac c .Lap trnh vien khong can quan tam en cac c , ma co the dung ten cua cac lenh nhay e chuyen ieu khien en mot nhan nao o . Cac lenh CMP AX,BX JG BELOW co ngha la neu AX>BX th nhay en nhan BELOW Mac du lenh CMP c thiet ke cho cac lenh nhay . Nhng lenh nhay co the ng trc 1 lenh khac , chang han : DEC AX JL THERE co ngha la neu AX trong dien dch co dau < 0 th ieu khien c chuyen cho THERE .

Nhay co dau so vi nhay khong dau

Chng 3 : Cac lenh lap va re nhanh

32

Mot lenh nhay co dau tng ng vi 1 nhay khong dau . V du lenh nhay co dau JG va lenh nhay khong dau JA . Viec s dung JG hay JA la tuy thuoc vao dien dch co dau hay khong dau . Bang 3-1 cho thay cac lenh nhay co dau phu thuoc vao trang thai cua cac c ZF,SF,OF .Cac lenh nhay khong dau phu thuoc vao trang thai cua cac c ZF va CF . S dunh lenh nhay khong hp ly se tao ra ket qua sai . Gia s rang chung ta dien dch co dau .Neu AX=7FFFh va BX=8000h , cac lenh : CMP AX,BX JA below se cho ket qua sai mac du 7FFFh > 8000h ( lenh JA khong thc hien c v 7FFFFh < 8000h trong dien dch khong dau ) Sau ay chung ta se lay v du e minh hoa viec s dung cac lenh nhay V du : Gia s rang AX va BX cha cac so co dau . Viet oan ct e at so ln nhat vao CX . Giai : MOV CX,AX ; at AX vao CX CMP BX,CX ;BX ln hn CX? JLE NEXT ; khong th tiep tuc MOV CX,BX ; yes , at BX vao CX NEXT:

3.3

Lenh JMP

Lenh JMP ( jump) la lenh nhay khong ieu kien . Cu phap cua JMP la JMP destination Trong o destination la mot nhan trong cung 1 oan vi lenh JMP . Lenh JMP dung e khac phuc han che cua cac lenh nhay co ieu kien ( khong qua 126 bytes ke t v tr cua lenh nhay co ieu kien ) V du chung ta co oan chng trnh sau : TOP: ; than vong lap DEC CX JNZ TOP ; neu CX>0 tiep tuc lap MOV AX,BX gia s than vong lap cha nhieu lenh ma no vt khoi 126 bytes trc lenh TOP . Co the giai quyet tnh trang nay bang cac lenh sau : TOP:

JNZ

Chng 3 : Cac lenh lap va re nhanh ; than vong lap DEC CX JNZ BOTTOM JMP EXIT BOTTOM: JMP TOP EXIT: MOV AX,BX

33

; neu CX>0 tiep tuc lap

3.4 Cau truc cua ngon ng cap cao


Chung ta se dung cac lenh nhay e thc hien cac cau truc tng t nh trong ngon ng cap cao

3.4.1 Cau truc re nhanh


Trong ngon ng cap cao cau truc re nhanh cho phep mot chng trnh re nhanh en nhng oan khac nhau tuy thuoc vao cac ieu kien . Trong phan nay chung ta se xem xet 3 cau truc

a) IF-THEN

Cau truc IF-THEN co the dien at nh sau :

IF condition is true THEN execute true branch statements END IF


V du : Thay the gia tr tren AX bang gia tr tuyet oi cua no Thuat toan nh sau : IF AX<0 THEN replace AX by -AX END-IF Co the ma hoa nh sau :

Chng 3 : Cac lenh lap va re nhanh ; if AX<0 CMP AX,0 JNL END_IF ;then NEG AX END_IF : , yes , change sign ; no , exit

34

b) IF_THEN_ELSE IF condition is true THEN execute true branch statements ELSE execute false branch statements END_IF V du : gia s AL va BL cha ASCII code cua 1 ky t .Hay xuat ra man hnh ky t trc ( theo th t ky t ) Thuat toan IF AL<= BL THEN display AL ELSE display character in BL END_IF Co the ma hoa nh sau : MOV AH,2 AL<=BL CMP AL,BL JNBE ELSE_ ; chuan b xuat ky t ;AL<=BL? ; no, display character in BL

;if

;then MOV DL,AL JMP DISPLAY ELSE_: MOV DL,BL DISPLAY: INT END_IF : 21H

Chng 3 : Cac lenh lap va re nhanh

35

c) CASE Case la mot cau truc re nhanh nhieu hng . Co the dung e test mot thanh ghi hay , bien nao o hay mot bieu thc ma gia tr cu the nan trong 1 vung cac gia tr Cau truc cua CASE nh sau : CASE expression value_1 : Statements_1 value_2 : Statements_2 . . value_n : Statements_n V du : Neu AX am th at -1 vao BX Neu AX bang 0 th at 0 vao BX Neu AX dng th at 1 vao BX Thuat toan : CASE

AX < 0 put -1 in BX = 0 put 0 in BX > 0 put 1 in BX Co the ma hoa nh sau : ; case AX CMP AX,0 JL NEGATIVE JE ZERO JG positive NEGATIVE: MOV BX,-1 JMP END_CASE ZERO: MOV BX,0 JMP END_CASE POSITIVE: MOV BX,1 JMP END_CASE END_CASE :

;test AX ;AX<0 ;AX=0 ;AX>0

Re nhanh vi mot to hp cac ieu kien oi khi tnh trang re nhanh trong cac lenh IF ,CASE can mot to hp cac ieu kien di dang :

Chng 3 : Cac lenh lap va re nhanh Condition_1 AND Condition_2 Condition_1 OR Condition_2

36

V du ve ieu kien AND : oc mot ky t va neu no la ky t hoa th in no ra man hnh Thuat toan : Read a character ( into AL) IF ( A<= character ) AND ( charater <= Z) THEN display character END_IF Sau ay la code ;read a character MOV AH,2 INT 21H ; character in AL ; IF ( A<= character ) AND ( charater <= Z) CMP AL,A ; char >=A? JNGE END_IF ;no, exit CMP AL,Z ; char <=Z? JNLE END_IF ; no exit ; then display it MOV DL,AL MOV AH,2 INT 21H END_IF :

V du ve ieu kien OR : oc mot ky t , neu ky t o la Y hoac y th in no len man hnh , ngc lai th ket thuc chng trnh . Thuat toan Read a charcter ( into AL) IF ( character =Y) OR ( character=y) THEN dispplay it ELSE terminate the program END_IF Code

Chng 3 : Cac lenh lap va re nhanh

37

;read a character MOV AH,2 INT 21H ; character in AL ; IF ( character =y ) OR ( charater = Y) CMP AL,y ; char =y? JE THEN ;yes , goto display it CMP AL,Y ; char =Y? JE THEN ; yes , goto display it JMP ELSE_ ;no , terminate THEN : MOV DL,AL MOV AH,2 INT 21H JMP END_IF ELSE_: MOV AH,4CH INT 21h END_IF : 4.3.2 Cau truc lap Mot vong lap gom nhieu lenh c lap lai , so lan lap phu thuoc ieu kien . a) Vong FOR Lenh LOOP co the dung e thc hien vong FOR .Cu phap cua lenh LOOP nh sau : LOOP destination_label So em cho vong lap la thanh ghi CX ma ban au no c gan 1 gia tr nao o . Khi lenh LOOP c thc hien CX se t ong giam i 1 . Neu CX cha bang 0 th vong lap c thc hien tiep tuc . Neu CX=0 lenh sau lenh LOOP c thc hien Dung lenh LOOP , vong FOR co the thc hien nh sau :

; gan cho cho CX so lan lap TOP: ; than cua vong lap LOOP TOP V du : Dung vong lap in ra 1 hang 80 dau * MOV CX,80 ; CX cha so lan lap MOV AH,2 ; ham xuat ky t

Chng 3 : Cac lenh lap va re nhanh MOV DL,* TOP: ;DL cha ky t *

38

INT 21h ; in dau * LOOP TOP ; lap 80 lan Lu y rang vong FOR cung nh lenh LOOP thc hien t nhat la 1 lan . Do o neu ban au CX=0 th vong lap se lam cho CX=FFFH ,tc la thc hien lap en 65535 lan . e tranh tnh trang nay , lenh JCXZ ( Jump if CX is zero) phai c dung trc vong lap . Lenh JXCZ co cu phap nh sau : JCXZ destination_label Neu CX=0 ieu khien c chuyen cho destination_label . Cac lenh sau ay se am bao vong lap khong thc hien neu CX=0 JCXZ SKIP TOP : ; than vong lap LOOP TOP SKIP : b) Vong WHILE Vong WHILE phu thuoc vao 1 ieu kien .Neu ieu kien ung th thc hien vong WHILE . V vay neu ieu kien sai th vong WHILE khong thc hien g ca . V du : Viet oan ma e em so ky t c nhap vao tren cung mot hang . MOV DX,0 ; DX e em so ky t MOV AH,1 ;ham oc 1 ky t INT 21h ; oc ky t vao AL WHILE_: CMP AL,0DH ; co phai la ky t CR? JE END_WHILE ; ung , thoat INC DX ;tang DX len 1 INT 21h ; oc ky t JMP WHILE_ ; lap END_WHILE :

c) Vong REPEAT Cau truc cua REPEAT la repeat statements until condition Trong cau truc repeat menh e c thi hanh ong thi ieu kien c kiem tra. Neu ieu kien ung th vong lap ket thuc .

Chng 3 : Cac lenh lap va re nhanh V du : viet oan ma e oc vao cac ky t cho en khi gap ky t trong . MOV REPEAT: INT ;until CMP JNE AH,1 21h AL, REPEAT ; oc ky t ; ky t tren AL ; AL= ?

39

Lu y : viec s dung REPEAT hay WHILE la tuy theo chu quan cua moi ngi . Tuy nhien co the thay rang REPEAT phai tien hanh t nhat lan , trong khi o WHILE co the khong tien hanh lan nao ca neu ngay t au ieu kien a b sai .

3.5

Lap trnh vi cau truc cap cao

Bai toan : Viet chng trnh nhac ngi dung go vao mot dong van ban . Tren 2 dong tiep theo in ra ky t viet hoa au tien va ky t viet hoa cuoi cung theo th t alphabetical . Neu ngi dung go vao mot ky t thng , may se thong bao No capitals Ket qua chay chng trnh se nh sau : Type a line of text : TRUONG DAi HOC DALAT First capital = A Last capital = U e giai bai toan nay ta dung ky thuat lap trnh TOP-DOWN , ngha la chia nho bai toan thanh nhieu bai toan con . Co the chia bai toan thanh 3 bai toan con nh sau : 1. Xuat 1 chuoi ky t ( li nhac) 2. oc va x ly 1 dong van ban 3. In ket qua Bc 1: Hien dau nhac . Bc nay co the ma hoa nh sau : MOV AH,9 ; ham xuat chuoi LEA DX,PRMOPT ;lay a ch chuoi vao DX INT 21H ; xuat chuoi Dau nhac co the ma hoa nh sau trong oan so lieu .

Chng 3 : Cac lenh lap va re nhanh PROMPT DB Type a line of text :,0DH,0AH,$

40

Bc 2 : oc va x ly mot dong van ban Bc nay thc hien hau het cac cong viec cua chng trnh : oc cac ky t t ban phm , tm ra ky t au va ky t cuoi , nhac nh ngi dung neu ky t go vao khong phai la ky t hoa . Co the bieu dien bc nay bi thuat toan sau : Read a character WHILE character is not a carrige return DO IF character is a capital (*) THEN IF character precedes first capital Then first capital= character End_if IF character follows last character Then last character = character End_if END_IF Read a character END_WHILE Trong o dong (*) co ngha la ieu kien e ky t la hoa la ieu kien AND IF ( A<= character ) AND ( character <= Z) Bc 2 co the ma hoa nh sau : MOV AH,1 ; oc ky t INT 21H ; ky t tren AL WHILE : ;trong khi ky t go vao khong phai la CR th thc hien CMP AL,0DH ; CR? JE END_WHILE ;yes, thoat ; neu ky t la hoa CMP AL,A ; char >=A? JNGE END_IF ;khong phai ky t hoa th nhay en END_IF CMP AL,Z ; char <= Z? JNLE END_IF ; khong phai ky t hoa th nhay en END_IF ; th

Chng 3 : Cac lenh lap va re nhanh ; neu ky t nam trc bien FIRST ( gia tr ban au la[ : ky t sau Z ) CMP AL,FISRT ; char < FIRST ? JNL CHECK_LAST; >= ; th ky t viet hoa au tien = ky t MOV FIRST,AL ; FIRST=character ;end_if CHECK_LAST: ; neu ky t la sau bien LAST ( gia tr ban au la @: ky t trc A) CMP AL,LAST ; char > LAST ? JNG END_IF ; <= ;th ky t cuoi cung = ky t MOV LAST, AL ;LAST = character ;end_if END_IF : ; oc mot ky t INT 21H ; ky t tren AL JMP WHILE_ ; lap END_WHILE: Cac bien FIRST va LAST c nh ngha nh sau trong oan so lieu : FIRST DB [ $ ; [ la ky t sau Z LAST DB @ $ ; @ la ky t trc A

41

Bc 3 : In ket qua Thuat toan IF no capital were typed THEN display No capital ELSE display first capital and last capital END_IF Bc 3 se phai in ra cac thong bao : NOCAP_MSG neu khong phai ch in CAP1_MSG ch in au tien CAP2_MSG ch in cuoi cung Chung c nh ngha nh sau trong oan so lieu . NOCAP_MSG DB 0DH,0AH,No capitals $ CAP1_MSG DB 0DH,0AH, First capital= FIRST DB [ $ CAP2_MSG DB 0DH,0AH,Last capital=

Chng 3 : Cac lenh lap va re nhanh LAST DB @ $

42

Bc 3 co the ma hoa nh sau : ;in ket qua MOV AH,9 ; ham xuat ky t ; IF khong co ch hoa nao c nhap th FIRST =[ CMP FIRST,[ ; FIRST=[ ? JNE CAPS ; khong , in ket qua ;THEN LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG INT 21H LEA DX,CAP2_MSG INT 21H ; end_if Chng trnh co the viet nh sau : TITLE PGM3-1 : FIRST AND LAST CAPITALS .MODEL SMALL .STACK 100h .DATA PROMPT DB Type a line of text, 0DH, AH, $ NOCAP_MSG DB 0DH,0AH, No capitals $ CAP1_MSG DB 0DH,0AH, First capital= FIRST DB [ $ CAP2_MSG DB Last capital = LAST DB @ $ .CODE MAIN PROC ; khi tao DS MOV AX,@DATA MOV DS,AX ; in dau nhac MOV AH,9 ; ham xuat chuoi LEA DX,PROMPT ;lay a ch chuoi vao DX INT 21H ; xuat chuoi

Chng 3 : Cac lenh lap va re nhanh ;oc va x ly 1 dong van ban MOV AH,1 ; oc ky t INT 21H ; ky t tren AL WHILE : ;trong khi ky t go vao khong phai la CR th thc hien CMP AL,0DH ; CR? JE END_WHILE ;yes, thoat ; neu ky t la hoa CMP AL,A ; char >=A? JNGE END_IF ;khong phai ky t hoa th nhay en END_IF CMP AL,Z ; char <= Z? JNLE END_IF ; khong phai ky t hoa th nhay en END_IF ; th ; neu ky t nam trc bien FIRST CMP AL,FISRT ; char < FIRST ? JNL CHECK_LAST; >= ; th ky t viet hoa au tien = ky t MOV FIRST,AL ; FIRST=character ;end_if CHECK_LAST: ; neu ky t la sau bien LAST CMP AL,LAST ; char > LAST ? JNG END_IF ; <= ;th ky t cuoi cung = ky t MOV LAST, AL ;LAST = character ;end_if END_IF : ; oc mot ky t INT 21H ; ky t tren AL JMP WHILE_ ; lap END_WHILE: ;in ket qua MOV AH,9 ; ham xuat ky t ; IF khong co ch hoa nao c nhap th FIRST =[ CMP FIRST,[ ; FIRST=[ ? JNE CAPS ; khong , in ket qua ;Then LEA DX,NOCAP_MSG INT 21H CAPS: LEA DX,CAP1_MSG

43

Chng 3 : Cac lenh lap va re nhanh INT 21H LEA DX,CAP2_MSG INT 21H ; end_if ; dos exit MOV AH,4CH INT 21h MAIN ENDP END MAIN

44

Chng 4 : Ca c le n h dch va quay

45

Chng 4 : CAC LENH LOGIC , DCH VA QUAY


Trong chng nay chung ta se xem xet cac lenh ma chung co the dung e thay oi tng bit tren mot byte hoac mot t so lieu . Kha nang quan ly en tng bit thng la khong co trong cac ngon ng cap cao ( tr C ) va ay la ly do giai thch tai sao hp ng van ong vai tro quan trong trong khi lap trnh .

4.1

Cac lenh logic

Chung ta co the dung cac lenh logic e thay oi tng bit tren byte hoac tren mot t so lieu . Khi mot phep toan logic c ap dung cho toan hang 8 hoac 16 bit th co the ap dung phep toan logic o tren tng bit e thu c ket qua cuoi cung . V du : Thc hien cac phep toan sau : 1. 10101010 AND 1111 0000 2. 10101010 OR 1111 0000 3. 10101010 XOR 1111 0000 4. NOT 10101010 Giai : 1. 10101010 AND 1111 0000 = 2. OR = 3. 1010 0000 10101010 1111 0000 1111 1010

1010 1010 XOR 1111 0000 0101 1010

4.

NOT 10101010 = 01010101

Chng 4 : Ca c le n h dch va quay

46

4.1.1 Lenh AND,OR va XOR


Lenh AND,OR va XOR thc hien cac chc nang ung nh ten goi cua no . Cu phap cua chung la : AND destination , source OR destination , source XOR destination , source Ket qua cua lenh c lu tr trong toan hang ch do o chung phai la thanh ghi hoac v tr nh . Toan hang nguon la co the la hang so , thanh ghi hoac v tr nh . D nhien hai toan hang eu la v tr nh la khong c phep . Anh hng en cac c : Cac c SF,ZF va PF phan anh ket qua AF khong xac nh CF=OF=0 e thay oi tng bit theo y muon chung ta xay dng toan hang nguon theo kieu mat na ( mask) . e xay dng mat na chung ta s dung cac tnh chat sau ay cua cac phep toan AND ,OR va XOR : b AND 1 = b b AND 0 = 0 b OR 0 = b b OR 1 = 1 b XOR 0 = b b XOR 1 = not b

Lenh AND co the dung e xoa ( clear) toan hang ch neu mat na bang 0

Lenh OR co the dung e at ( set) 1 cho toan hang ch neu mat na bang 1 Lenh XOR co the dung e lay ao toan hang ch neu mat na bang 1 . Lenh XOR cung co the dung e xoa noi dung mot thanh ghi ( XOR vi chnh no ) V du : Xoa bit dau cua AL trong khi cac bit khac khong thay oi Giai : Dung lenh AND vi mat na 0111111=7Fh AND AL,7Fh ; xoa bit dau ( dau + ) cua AL V du : Set 1 cho cac bit MSB va LSB cua AL , cac bit khac khong thay oi . Giai : Dung lenh OR vi mat na 10000001 =81h OR AL,81h ; set 1 cho LSB va MSB cua AL V du : Thay oi bit dau cua DX Giai : Dung lenh XOR vi mat na 1000000000000000=8000h XOR DX,8000h Cac lenh logic la ac biet co ch khi thc hien cac nhiem vu sau : oi mot so di dang ASCII thanh mot so Gia s rang chung ta oc mot ky t t ban phm bang ham 1 ngat 21h . Khi o AL cha ma ASCII cua ky t . ieu nay cung ung neu ky t o la mot so ( digital character) . V du neu chung ta go so 5 th AL = 35h ( ASCII code for 5)

Chng 4 : Ca c le n h dch va quay

47

e cha 5 tren AL chung ta dung lenh : SUB AL,30h Co mot cach khac e lam viec nay la dung lenh AND e xoa na byte cao (high nibble = 4 bit cao ) cua AL : AND AL,0Fh V cac so t 0-9 co ma ASCII t 30h-39h , nen cach nay dung e oi moi so ASCII ra thap phan . Chng trnh hp ng oi mot so thap phan thanh ma ASCII cua chung c xem nh bai tap . oi ch thng thanh ch hoa Ma ASCII cua cac ky t thng t a-z la 61h-7Ah va ma ASCII cua cac ky t hoa t A-Z la 41h -5Ah . Gia s DL cha ky t thng , e oi no thanh ch hoa ta du ng lenh : SUB DL,20h Neu chung ta so sanh ma nh phan tng ng cua ky t thng va ky t hoa th thay rang ch can xoa bit th 5 th se oi ky t thng sang ky t hoa . Character Code Character Code a(61h) 01100001 A (41h) 01000001 b (62h) 01100010 B ( 42h) 01000010 . . z ( 7Ah) 01111010 Z ( 5Ah) 01011010 Co the xoa bit th 5 cua DL bang cach dung lenh AND vi mat na 11011111= DF h AND DL,0DFh ; oi ky t thng trong DL sang ky t hoa Xoa mot thanh ghi Chung ta co the dung lenh sau e xoa thanh ghi AX : MOV AX,0 hoac SUB AX,AX XOR AX,AX Lenh th nhat can 3 bytes trong khi o 2 lenh sau ch can 2 bytes . Nhng lenh MOV phai c dung e xoa 1 v tr nh .

Kiem tra mot thanh ghi co bang 0 ?

Chng 4 : Ca c le n h dch va quay

48

Thay cho lenh CMP AX,0 Ngi ta dung lenh OR CX,CX e kiem tra xem CX co bang 0 hay khong v no lam thay oi c ZF ( ZF=0 neu CX=0 ) 4.1.2 Lenh NOT Lenh NOT dung e lay bu 1 ( ao) toan hang ch . Cu phap la : NOT destination Khong co c nao b anh hng bi lenh NOT V du : Lay bu 1 AX NOT AX 4.1.3 Lenh TEST Lenh TEST thc hien phep AND gia toan hang ch va toan hang nguon nhng khong lam thay oi toan hang ch . Muc ch cua lenh TEST la e set cac c trang thai . Cu phap cua lenh test la : TEST destination,source Cac c b anh hng cua lenh TEST : SF,ZF va PF phan anh ket qua AF khong xac nh CF=OF=0 Lenh TEST co the dung e kham 1 bit tren toan hang . Mat na phai cha bit 1 tai v tr can kham , cac bit khac th bang 0 . Ket qua cua lenh : TEST destination,mask se la 1 tai bit can test neu nh toan hang ch cha 1 tai bit test . Neu toan hang ch cha 0 tai bit test th ket qua se bang 0 va do o ZF=1 . V du : Nhay ti nhan BELOW neu AL la mot so chan Giai : So chan co bit th 0 bang 0 , lenh TEST AL,1 ; AL chan ? JZ BELOW ; ung , nhay en BELOW

4.2

Lenh SHIFT

Chng 4 : Ca c le n h dch va quay

49

Lenh dch va quay se dch cac bit tren tren toan hang ch mot hoac nhieu v tr sang trai hoac sang phai . Khac nhau cua lenh dch va lenh quay la cho : cac bit b dch ra ( trong lenh dch ) se b mat .Trong khi o oi vi lenh quay , cac bit b dch ra t mot au cua toan hang se c a tr lai au kia cua no . Co 2 kha nang viet oi vi lenh dch va quay : OPCODE destination,1 OPCODE destination,CL trong cach viet th hai thanh ghi CL cha N la so lan dch hay quay . Toan hang ch co the la mot thanh ghi 8 hoac 16 bit , hoac mot v tr nh . Cac lenh dch va quay thng dung e nhan va chia cac so nh phan . Chung cung c dung cho cac hoat ong nhap xuat nh phan va hex . 4.2.1 Lenh dch trai ( left shift ) Lenh SHL dch toan hang ch sang trai .Cu phap cua lenh nh sau : SHL destination ,1 ; dch trai dest 1 bit SHL destination , CL ; dch trai N bit ( CL cha N) C moi lan dch trai , mot so 0 c them vao LSB . CF 4 3 2 1 0 0 1 byte Cac c b anh hng : SF,PF,ZF phan anh ket qua AF khong xac nh CF= bit cuoi cung c dch ra OF= 1 neu ket qua thay oi dau vao lan dch cuoi cung V du : Gia s DH =8Ah va CL=3 . Hoi gia tr cua DH va CF sau khi lenh SHL DH,CL c thc hien ? Ket qua DH=01010000=50h , CF=0 Nhan bang lenh SHL Chung ta hay xet so 235decimal . Neu dch trai 235 mot bit va them 0 vao ben phai chung ta se co 2350 . No cach khac , khi dch trai 1 bit chung ta a nhan 10. oi vi so nh phan, dch trai 1 bit co ngha la nhan no vi 2.V du AL=00000101=5d SHL AL,1 ; AL=00001010=10d SHL AL,CL ; neu CL=2 th AL=20d sau khi thc hien lenh Lenh dch trai so hoc ( SAL =Shift Arithmetic Left) 7 6 5

Chng 4 : Ca c le n h dch va quay

50

Lenh SHL co the dung e nhan mot toan hang vi he so 2 . Tuy nhien trong trng hp ngi ta muon nhan manh en tnh chat so hoc cua phep toan th lenh SAL se c dung thay cho SHL . Ca 2 lenh eu tao ra cung mot ma may . Mot so am cung co the c nhan 2 bang cach dch trai . V du : Neu AX=FFFFh= -1 th sau khi dch trai 3 lan AX=FFF8h = -8 Tran Khi chung ta dung lenh dch trai e nhan th co the xay ra s tran . oi vi lenh dch trai 1 lan , CF va OF phan anh chnh xac s tran dau va tran khong dau . Tuy nhien cac c se khong phan anh chnh xac ket qua neu dch trai nhieu lan bi v dch nhieu lan thc chat la mot chuoi cac dch 1 lan lien tiep va v vay cac c CF va OF ch phan anh ket qua cua lan dch cuoi cung . V du : BL=80h , CL=2 th lenh SHL BL,CL se lam cho CF=OF=0 mac du tren thc te a xay ra ca tran dau va tran khong dau . V du : viet oan ma nhan AX vi 8 . Gia s rang khong co tran . MOV CL,3 ; CL=3 SHL AX,CL ; AX*8 4.2.2 Lenh dch phai ( Right Shift ) Lenh SHR dch phai toan hang ch 1 hoac N lan . SHR destination,1 SHR destination,CL C moi lan dch phai , mot so 0 c them vao MSB Cac c b anh hng giong nh lenh SHL 0 7 6 5 4 3 1 byte 2 1 0 CF

V du : gia s DH = 8Ah , CL=2 Lenh SHR DH,CL ; dch phai DH 2 lan se cho ket qua nh sau : Ket qua tren DH=22h , CF=1 Cu ng nh lenh SAL , lenh SAR ( dch phai so hoc ) hoat ong giong nh SHR , ch co 1 ieu khac la MSB van gi gia tr nguyen thuy ( bit dau gi nguyen) sau khi dch .

Chia bang lenh dch phai

Chng 4 : Ca c le n h dch va quay

51

Lenh dch phai se chia 2 gia tr cua toan hang ch . ieu nay u ng oi vi so chan . oi vi so le , lenh dch phai se chia 2 va lam tron xuong so nguyen gan no nhat . V du , neu BL = 00000101=5 th khi dch phai BL=00000010 =2 . Chia co dau va khong dau e thc hien phep chia bang lenh dch phai , chung ta phai phan biet gia so co dau va so khong dau . Neu dien dch la khong dau th dung lenh SHR , con neu dien dch co dau th dung SAR ( bit dau gi nguyen ) . V du : dung lenh dch phai e chia so khong dau 65143 cho 4 . Thng so at tren AX . MOV AX,65134 MOV CL,2 SHR AX,CL V du : Neu AL = -15 , cho biet AL sau khi lenh SAR AL,1 c thc hien Giai : AL= -15 = 11110001b Sau khi thc hien SAR AL ta co AL = 11111000b = -8 4.3 Lenh quay ( Rotate)

Quay trai ( rotate left ) = ROL se quay cac bit sang trai , LSB se c thay bang MSB . Con CF=MSB CF 7 6 5 4 3 2 1 0

Cu phap cua ROL nh sau : ROL destination,1 ROL destination,CL Quay phai ( rotate right ) = ROR se quay cac bit sang phai , MSB se c thay bang LSB . Con CF=LSB

CF

Cu phap cua lenh quay phai la

Chng 4 : Ca c le n h dch va quay

52

ROR destination,1 ROR destination,CL Trong cac lenh quay phai va quay trai CF cha bit b quay ra ngoai . V du sau ay cho thay cach e kham cac bit tren mot byte hoac 1 t ma khong lam thay oi noi dung cua no . V du : Dung ROL e em so bit 1 tren BX ma khong thay oi noi dung cua no . Ket qua cat tren AX . Giai : XOR AX,AX ; xoa AX MOV CX,16 ; so lan lap = 16 ( mot t ) TOP: ROL BX,1 ; CF = bit quay ra JNC NEXT ; neu CF =0 th nhay en vong lap INC AX ; ngc lai (CF=1) , tang AX NEXT: LOOP TOP Quay trai qua c nh ( rotate through carry left ) = RCL . Lenh nay giong nh lenh ROL ch khac la c nh nam gia MSB va LSB trong vong kn cua cac bit

CF

Cu phap cua cua lenh RCL nh sau : RCL destination,1 RCL destination,CL Quay phai qua c nh ( rotate through carry right ) = RCR . Lenh nay giong nh lenh ROR ch khac la c nh nam gia MSB va LSB trong vong kn cua cac bit .

Chng 4 : Ca c le n h dch va quay CF

53

Cu phap cua cua lenh RCR nh sau : RCR destination,1 RCR destination,CL V du : Gia s DH = 8Ah ,CF=1 va CL=3 . Tm gia tr cua DH,CF sau khi lenh RCR DH,CL c thc hien Giai : Gia tr ban au Sau khi quay 1 lan Sau khi quay 2 lan Sau khi quay 3 lan CF 1 0 1 0 DH 10001010 11000101 01100010 10110001=B1H

Anh hng cua lenh quay len cac c SF,PF va ZF phan anh ket qua CF-bit cuoi cung c dch ra OF=1 neu ket qua thay oi dau vao lan quay cuoi cung ng dung : ao ngc cac bit tren mot byte hoac 1 t .V du AL =10101111 th sau khi ao ngc AL=11110101 . Co the lap 8 lan cong viec sau :Dung SHL e dch bit MSB ra CF , Sau o dung RCR e a no vao BL . oan ma e lam viec nay nh sau : MOV CX,8 ;so lan lap REVERSE : SHL AL,1 ; dch MSB ra CF RCR BL,1 ; a CF ( MSB) vao BL LOOP REVERSE MOV AL,BL ; AL cha cac bit a ao ngc

4.4

Xuat nhap so nh phan va so hex

Chng 4 : Ca c le n h dch va quay

54

Cac lenh dch va quay thng c s dung trong cac hoat ong xuat nhap so nh phan va so hex. 4.4.1 Nhap so nh phan Gia s can nhap mot so nh phan t ban phm , ket thuc la phm CR . So nh phan la mot chuoi cac bit 0 va 1 . Moi mot ky t go vao phai c bien oi thanh mot bit gia tr ( 0 hoac 1) roi tch luy chung trong 1 thanh ghi . Thuat toan sau ay se oc mot so nh phan t ban phm va cat no tren thanh ghi BX . Clear BX input a character ( 0 or 1) WHILE character<> CR DO convert character to binary value left shift BX insert value into LSB of BX input a character END_WHILE oan ma thc hien thuat toan tren nh sau : XOR BX,BX MOV AH,1 INT 21h WHILE_: CMP JE AND SHL OR INT JMP END_WHILE: AL,0DH ; ky t la CR? END_WHILE ; ung , ket thuc AL,0Fh ; convert to binary value BX,1 ; dch trai BX 1 bit BL,AL ; at gia tr vao BX 21h ; oc ky t tiep theo WHILE_ ; lap ; Xoa BX ; ham oc 1 ky t ; ky t tren AL

4.4.2 Xuat so nh phan Gia s can xuat so nh phan tren BX ( 16 bit) . Thuat toan co the viet nh sau FOR 16 times DO rotate left BX ( put MSB into CF) IF CF=1

Chng 4 : Ca c le n h dch va quay then output 1 else output 0 END_IF END_FOR oan ma e xuat so nh phan co the xem nh bai tap .

55

4.4.3 Nhap so HEX Nhap so hex bao gom cac so t 0 en 9 va cac ky t A en F . Ket qua cha trong BX . e ch o n gian chung ta gia s rang : ch co ky t hoa c dung ngi dung nhap vao khong qua 4 ky t hex Thuat toan nh sau : Clear BX input character WHILE character<> CR DO convert character to binary value( 4 bit) left shift BX 4 times insert value into lower 4 bits of BX input character END_WHILE oan ma co the viet nh sau :

Chng 4 : Ca c le n h dch va quay

56

XOR MOV MOV

BX,BX CL,4 AH,1

INT 21h WHILE_: CMP AL,0Dh ; character <>CR? JE END_WHILE_ ; yes , exit ; convert character to binary value CMP AL,39H ; a character? JG LETTER ; no , a letter ; input is a digit AND AL,0Fh ; convert digit to binary value JMP SHIFT ; go to insert BX LETTER: SUB AL,37h ; convert letter to binary value SHIFT: SHL BX,CL ; make room for new value ; insert value into BX OR BL,AL ; put value into low 4 bits of BX INT 21H ; input a character JMP WHILE_ END_WHILE:

; clear BX ; counter for 4 shift ; input character ; function ; input a chracter AL

Chng 4 : Ca c le n h dch va quay

57

4.4.4 Xuat so HEX e xuat so hex tren BX ( 16 bit = 4 digit hex) co the bat au t 4 bit ben trai , chuyen chung thanh mot so hex roi xuat ra man hnh . Thuat toan nh sau : FOR 4 times DO move BH to DL

Shift DL 4 times to right IF DL < 10 then convert to character in 0 ...9 else convert to character in A..F END_IF output character ( HAM 2 NGAT 21H) rotate BX left 4 times END_FOR Phan code cho thuat toan nay xem nh bai tap .

Chng 4 : Ca c le n h dch va quay

58

Chng 5 : Ngan xep va thu tuc

58

Chng 5 : NGAN XEP VA THU TUC


oan ngan xep ( stack segment ) trong chng trnh c dung e cat gi tam thi so lieu va a ch . Trong chng nay chung ta se xem xet cach to chc stack va s dung no e thc hien cac thu tuc ( procedure) . 5.1 Ngan xep

Ngan xep la cau truc d lieu 1 chieu . ieu o co ngha la so lieu c a vao va lay ra khoi stack tai au cuoi cua stack theo nguyen tac LIFO ( last in first out) . V tr tai o so lieu c a vao hay lay ra goi la nh cua ngan xep ( top of stack) .Co the hnh dung satck nh mot chong a . a a vao sau cung nam tai nh cua chong a . Khi lay ra , a tren cung se c lay ra trc . Mot chng trnh phai danh ra mot khoi nh cho ngan xep . Chung ta dung ch dan .STACK 100h e khai bao kch thc vung stack la 256 bytes . Khi chng trnh c dch va nap vao bo nh thanh ghi SS ( stack segment) se cha a ch oan stack . Con SP ( stack pointer) cha a ch nh cua ngan xep . Trong khai bao stack 100h tren ay , SP nhan gia tr 100h . ieu nay co ngha la stack trong rong ( empty) nh hnh 4-1.

OFFSET 00FO 00F2 00F4 00F6 00F8 00FA 00FC 00FE 0100 AX=1234 Hnh 4.1 : BX=5678

SP SP=0100

STACK EMPTY

Chng 5 : Ngan xep va thu tuc

59

Lenh PUSH va PUSHF e them mot t mi vao stack chung ta dung lenh : PUSH source ; a mot thanh ghi hoac t nh 16 bit vao stack V du PUSH AX . Khi lenh nay c thc hien th : SP giam i 2 mot ban copy cua toan hang nguon oc chuyen en a ch SS:SP con toan hang nguon khong thay oi . Lenh PUSHF khong co toan hang .No dung e ay noi dung thanh ghi c vao stack . Sau khi thc hien lenh PUSH th SP se giam 2 . Hnh 5-2 va 5-3 cho thay lenh PUSH lam thay oi trang thai stack nh the nao . OFFSET 00FO 00F2 00F4 00F6 00F8 00FA 00FC 00FE 1234 SP 0100 AX=1234 BX=5678 SP=00FE Hnh 5-2 : STACK sau khi thc hien lenh PUSH AX OFFSET 00FO 00F2 00F4 00F6 00F8 00FA 00FC 5678 SP 00FE 1234 0100 Hnh 5-3 : STACK sau khi thc hien lenh PUSH BX

Chng 5 : Ngan xep va thu tuc Lenh POP va POPF e lay so lieu tai nh stack ra khoi stack ,chung ta dung lenh : POP destination ; lay so lieu tai nh stack ra destination Destination co the la 1 thanh ghi hoac t nh 16 bit . V du : POP BX ; Lay so lieu trong stack ra thanh ghi BX . Khi thc hien lenh POP : noi dung cua nh stack ( a ch SS:SP) c di chuyen en ch . SP tang 2 Lenh POPF se lay nh stack a vao thanh ghi c . Cac lenh PUSH,PUSHF,POP,POPF khong anh hng en cac c . Lu y : Lenh PUSH, POP la lenh 2 bytes v vay cac lenh 1 byte nh : PUSH DL ; lenh khong hp le PUSH 2 ; lenh khong hp le

60

Ngoai chc nang lu tr so lieu va a ch cua chng trnh do ngi s dung viet , stack con c dung bi he ieu hanh e lu tr trang thai cua chng trnh chnh khi co ngat . 5.2 ng dung cua stack Bi v nguyen tac lam viec cua stack la LIFO nen cac oi tng c lay ra khoi stack co trat t ngc lai vi trat t ma chung c a vao stack . Chng trnh sau ay se oc mot chuoi ky t roi in chung tren dong mi vi trat t ngc lai . Thuat toan cho chng trnh nh sau : Display a ? Initialize count to 0 Read a character WHILE character is not CR DO PUSH chracter onto stack Incremet count Read a character END_WHILE ; Goto a new line FOR count times DO POP a chracter from the stack Display it ; END_FOR

Chng 5 : Ngan xep va thu tuc Sau ay la chng trnh : TITLE PGM5-1 : REVERSE INPUT .MODEL SMALL .STACK 100H .CODE MAIN PROC ; in dau nhac MOV AH,2 MOV DL,? INT 21H ; xoa bien em CX XOR CX,CX ;oc 1 ky t MOV AH,1 INT 21H ;Trong khi character khong phai la CR WHILE_: CMP AL,0DH JE END_WHILE ;cat AL vao stack tang bien em PUSH AX ; ay AX vao stack INC CX ; tang CX ; oc 1 ky t INT 21h JMP WHILE_ END_WHILE: ; Xuong dong mi MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H JCXZ EXIT ; thoat neu CX=0 ( khong co ky t nao c nhap) ; lap CX lan TOP: ;lay ky t t stack POP DX ;xuat no INT 21H LOOP TOP ; lap neu CX>0

61

Chng 5 : Ngan xep va thu tuc ; end_for EXIT: MOV AH,4CH INT 21H MAIN ENDP END MAIN

62

Giai thch them ve chng trnh : v so ky t nhap la khong biet v vay dung thanh ghi CX e em so ky t nhap . CX cung dung cho vong FOR e xuat cac ky t theo th t ngc lai . Mac du ky t ch gi tren AL nhng phai ay ca thanh ghi AX vao stack . Khi xuat ky t chung ta dung lenh POP DX e lay noi dung tren stack ra. Ma ASCII cua ky t tren DL , sau o goi INT 21h e xuat ky t .

5.3

Thu tuc ( Procedure)

Trong chng 3 chung ta a e cap en y tng lap trnh top-down . Y tng nay co ngha la mot bai toan nguyen thuy c chia thanh cac bai toan con ma chung de giai quyet hn bai toan nguyen thuy . Trong cac ngon ng cap cao ngi ta dung thu tuc e giai cac bai toan con , va chung ta cung lam nh vay trong hp ng . Nh vay la mot chng trnh hp ng co the c xay dng bang cac thu tuc . Mot thu tuc goi la thu tuc chnh se cha noi dung chu yeu cua chng trnh . e thc hien mot cong viec nao o , thu tuc chnh goi ( CALL) mot thu tuc con . Thu tuc con cung co the goi mot thu tuc con khac . Khi mot thu tuc goi mot thu tuc khac , ieu khien c chuyen ti ( control transfer) thu tuc c goi va cac lenh cua thu tuc c goi se c thi hanh . Sau khi thi hanh het cac lenh trong no , thu tuc c goi se tra ieu khien ( return control) cho thu tuc goi no . Trong ngon ng cap cao , lap trnh vien khong biet va khong the biet c cau cua viec chuyen va tra ieu khien gia thu tuc chnh va thu tuc con. Nhng trong hp ng co the thay ro c cau nay ( xem phan 5.4) . Khai bao thu tuc Cu phap cua lenh tao mot thu tuc nh sau : name PROC type ; body of procedure RET name ENDP Name do ngi dung nh ngha la ten cua thu tuc . Type co the la NEAR ( co the khong khai bao ) hoac FAR .

Chng 5 : Ngan xep va thu tuc

63

NEAR co ngha la thu tuc c goi nam cung mot oan vi thu tuc goi . FAR co ngha la thu tuc c goi va thu tuc goi nam khac oan . Trong phan nay chung ta se ch mo ta thu tuc NEAR . Lenh RET tra ieu khien cho thu tuc goi . Tat ca cac thu tuc phai ket thuc bi RET tr thu tuc chnh . Chu thch cho thu tuc : e ngi oc de hieu thu tuc ngi ta thng s dung chu thch cho thu tuc di dang sau : ; ( mo ta cac cong viec ma thu tuc thi hanh) ; input: ( mo ta cac tham so co tham gia trong chng trnh ) ; output : ( cho biet ket qua sau khi chay thu tuc ) ; uses : ( liet ke danh sach cac thu tuc ma no goi ) MAIN PROC CALL PROC1 next instruction Hnh 5-1 : Goi thu tuc va tr ve PROC1 PROC first instruction

RET

5.4

CALL & RETURN

Lenh CALL c dung e goi mot thu tuc . Co 2 cach goi mot thu tuc la goi trc tiep va goi gian tiep . CALL name ; goi trc tiep thu tuc co ten la name CALL address-expression ; goi gian tiep thu tuc trong o address-expression ch nh mot thanh ghi hoac mot v tr nh ma no cha a ch cua thu tuc . Khi lenh CALL c thi hanh th : ia ch quay ve cua thu tuc goi c cat vao stack . a ch nay chnh la offset cua lenh tiep theo sau lenh CALL . IP lay a ch offset cua lenh au tien tren thu tuc c goi , co ngha la ieu khien c chuyen en thu tuc . e tra ieu khien cho thu tuc chnh , lenh RET pop-value

Chng 5 : Ngan xep va thu tuc

64

c s dung . Pop-value ( mot so nguyen N ) la tuy chon . oi vi thu tuc NEAR , lenh RET se lay gia tr trong SP a vao IP . Neu pop-value la ra mot so N th IP=SP+N Trong ca 2 trng hp th CS:IP cha ia ch tr ve chng trnh goi va ieu khien c tra cho chng trnh goi ( xem hnh 5-2)

MAIN PROC IP 0010 0012 CALL PROC1 next instruction PROC1 PROC first instruction 00FE 0100h SP 0300 RET Hnh 5-2 a : Trc khi CALL MAIN PROC 0010 0012 CALL PROC1 next instruction PROC1 PROC first instruction 00FE 0012 0100h SP STACK SEGMENT

0200

IP

0200

0300

RET

STACK SEGMENT

Hnh 5-2 b : Sau khi CALL

Chng 5 : Ngan xep va thu tuc MAIN PROC 0010 0012 CALL PROC1 next instruction PROC1 PROC first instruction 00FE 0012 0100h SP

65

0200

IP

0300

RET

STACK SEGMENT

Hnh 5-2 c : Trc khi RET

MAIN PROC 0010 0012 CALL PROC1 next instruction PROC1 PROC first instruction 00FE 0100h STACK SEGMENT SP

IP

0200

0300

RET

Hnh 5-2 d : Sau khi RET

5.5

V du ve thu tuc

Chung ta se viet chng trnh tnh tch cua 2 so dng A va B bang thuat toan cong ( ADD) va dch ( SHIFT ) Thuat toan nh sau :

Chng 5 : Ngan xep va thu tuc Product = 0 REPEAT IF lsb of B is 1 THEN product=product+A END_IF shift left A shift right B UNTIL B=0 Trong chng trnh sau ay chung ta se ma hoa thu tuc nhan vi ten la MULTIPLY. Chng trnh chnh khong co nhap xuat , thay vao o chung ta dung DEBUG e nhap xuat . TITLE PGM5-1: MULTIPLICATION BY ADD AND SHIFT .MODEL SMALL .STACK 100H .CODE MAIN PROC ; thc hien bang DEBUG . at A = AX , B=BX CALL MULTIPLY ;DX cha ket qua MOV AH,4CH INT 21H MAIN ENDP MULTIPY PROC ; input : AX=A , BX=B , AX va BX co gia tr trong khoang 0...FFH ; output : DX= ket qua PUSH AX PUSH BX XOR DX,DX REPEAT: ; Neu lsb cua B =1 TEST BX,1 ;lsb=1? JZ END_IF ; khong , nhay en END_IF ; th ADD DX,AX ; DX=DX+AX END_IF : SHL AX,1 ; dch trai AX 1 bit SHR BX,1 ;dch phai BX 1 bit ; cho en khi BX=0

66

Chng 5 : Ngan xep va thu tuc JNZ REPEAT ; neu BX cha bang 0 th lap POP BX ; lay lai BX POP AX ; lay lai AX RET ; tra ieu khien cho chng trnh chnh MULTIPLY ENDP END MAIN

67

Sau khi dch chng trnh , co the dung DEBUG e chay th no bang cach cung cap gia tr ban au cho AX va BX . Dung lenh U(unassembler) e xem noi dung cua bo nh tng ng vi cac lenh hp ng . Co the xem noi dung cua stack bang lenh D(dump) DSS:F0 FF ; xem 16 bytes tren cung cua stack Dung lenh G(go) offset e chay tng nhom lenh t CS:IP hien hanh CS:offset . Trong qua trnh chay DEBUG co the kiem tra noi dung cac thanh ghi . Lu y ac biet en IP e xem cach chuyen va tra ieu khien khi goi va thc hien mot thu tuc .

Chng 6 : Lenh nhan va chia Chng 6 : LENH

68

NHAN VA CHIA

Trong chng 5 chung ta a noi en cac lenh dch ma chung co the dung e nhan va chia vi he so 2 . Trong chng nay chung ta se noi en cac lenh nhan va chia mot so bat ky . Qua trnh x ly cua lenh nhan va chia oi vi so co dau va so khong dau la khac nhau do o co lenh nhan co dau va lenh nhan khong dau . Mot trong nhng ng dung thng dung nhat cua lenh nhan va chia la thc hien cac thao tac nhap xuat thap phan . Trong chng nay chung ta se viet thu tuc cho nhap xuat thap phan ma chung c s dung nhieu trong cac hoat ong xuat nhap t ngoai vi . 6.1 Lenh MUL va IMUL

Nhan co dau va nhan khong dau Trong phep nhan nh phan so co dau va so khong dau phai c phan biet mot cach ro rang . V du chung ta muon nhan hai so 8 bit 1000000 va 1111111 . Trong dien dch khong dau , chung la 128 va 255 . Tch so cua chung la 32640 = 0111111110000000b . Trong dien dch co dau , chung la -128 va -1 . Do o tch cua chung la 128 = 0000000010000000b . V nhan co dau va khong dau dan en cac ket qua khac nhau nen co 2 lenh nhan : MUL ( multiply) nhan khong dau IMUL ( integer multiply) nhan co dau Cac lenh nay nhan 2 toan hang byte hoac t . Neu 2 toan hang byte c nhan vi nhau th ket qua la mot t 16 bit .Neu 2 toan hang t c nhan vi nhau th ket qua la mot double t 32 bit . Cu phap cua chung la : MUL source ; IMUL source ; Toan hang nguon la thanh ghi hoac v tr nh nhng khong c la mot hang Phep nhan kieu byte oi vi phep nhan ma toan hang la kieu byte th AX=AL*SOURCE ; Phep nhan kieu t oi vi phep nhan ma toan hang la kieu t th DX:AX=AX*SOURCE

Chng 6 : Lenh nhan va chia

69

Anh hng cua cac lenh nhan len cac c . SF,ZF ,AF,PF : khong xac nh sau lenh MUL CF/OF= 0 neu na tren cua ket qua(DX) bang 0 =1 trong cac trng hp khac sau lenh IMUL CF/OF = 0 neu na tren cua ket qua co bit dau giong nh bit dau cua na thap . = 1 trong cac trng hp khac Sau ay chung ta se lay vai v du . V du 1 : Gia s rang AX=1 va BX=FFFFh INSTRUCTION MUL BX IMUL BX Dec product Hex Product 65535 0000FFFF -1 FFFFFFFF DX 0000 FFFF AX FFFF FFFF CF/OF 0 0

V du 2 : Gia s rang AX=FFFFh va BX=FFFFh INSTRUCTION MUL BX IMUL BX Dec product Hex Product 4294836225 FFFE0001 1 00000001 DX FFFE 00000 AX 0001 0001 CF/OF 1 0

V du 3 : Gia s rang AX=0FFFh INSTRUCTION MUL AX IMUL AX Dec product Hex Product 16769025 00FFE001 16769025 00FFE001 DX 00FF 00FF AX E001 E001 CF/OF 1 1

V du 4 : Gia s rang AX=0100h va CX=FFFFh INSTRUCTION MUL CX IMUL CX Dec product Hex Product 16776960 00FFFF00 -256 FFFFFF00 DX 00FF FFFF AX FF00 FF00 CF/OF 1 0

V du 5 : Gia s rang AL=80h va BL=FFh INSTRUCTION MUL BL IMUL BL Dec product Hex Product 128 7F80 128 0080 AH 7F 00 AL 80 80 CF/OF 1 1

Chng 6 : Lenh nhan va chia

70

6.2

ng dung n gian cua lenh MUL va IMUL

Sau ay chung ta se lay mot so v du minh hoa viec s dung lenh MUL va IMUL trong chng trnh . V du 1 : Chuyen oan chng trnh sau trong ngon ng cap cao thanh ma hp ng : A = 5xA -12xB . Gia s rang A va B la 2 bien t va khong xay ra s tran . Code : MOV AX,5 IMUL A MOV A,AX MOV AX,12 IMUL B SUB A,AX ; AX=5 ; AX=5xA ; A=5xA ; AX=12 ; AX=12xB ; A=5xA-12xB

V Du 2 : viet thu tuc FACTORIAL e tnh N! cho mot so nguyen dng . Thu tuc phai cha N tren CX va tra ve N! tren AX . Gia s khong co tran . Giai : nh nghia cua N! la N! = 1 neu N=1 = N x (N-1)x (N-2) x...x 1 neu N>1 Thuat toan e tnh N! nh sau : Product =1 Term = N FOR N times DO Product = product x term term=term -1 ENDFOR Code : FACTORIAL PROC ; computes N! ; input : CX=N ; output : AX=N! MOV AX,1 ; AX=1 MOV CX,N ; CX=N TOP: MUL CX ; Product = product x term LOOP TOP ; RET FACTORIAL ENDP

Chng 6 : Lenh nhan va chia

71

6.3

Lenh DIV va IDIV

Cung nh lenh nhan , co 2 lenh chia DIV va IDIV cho so khong dau va cho so co dau . Cu phap cua chung la : DIV divisor IDIV divisor Toan hang byte Lenh chia toan hang byte se chia so b chia 16 bit ( dividend) tren AX cho so chia ( divisor) la 1 byte . Divisor phai la 1 thanh ghi 8 bit hoac 1 byte nh . Thng so tren AL con so d tren AH . Toan hang t Lenh chia toan hang t se chia so b chia 32 bit ( dividend) tren DX:AX cho so chia ( divisor) la 1 t . Divisor phai la 1 thanh ghi 16 bit hoac 1 t nh . Thng so tren AX con so d tren DX . Anh hng cua cac c : cac c co trang thai khong xac nh . Divide Overflow Khi thc hien phep chia ket qua cothe khong cha het tren AL hoac AX neu so chia be hn rat nhieu so vi so b chia . Trong trng hp nay tren man hnh se xuat hien thong bao : Divide overflow V du 1 : Gia s DX = 0000h , AX = 0005h va BX = 0002h Instruction DIV BX IDIV BX Dec Quotient 2 2 Dec Remainder 1 1 AX 0002 0002 DX 0001 0001

V du 1 : Gia s DX = 0000h , AX = 0005h va BX = FFFEh Instruction DIV BX IDIV BX Dec Quotient 0 -2 Dec Remainder 5 1 AX 0000 FFFE DX 0005 0001

V du 3 : Gia s DX = FFFFh , AX = FFFBh va BX = 0002h Instruction IDIV BX DIV BX Dec Quotient -2 OVERFLOW Dec Remainder -1 AX FFFE DX FFFF

Chng 6 : Lenh nhan va chia V du 4 : Gia s AX = 00FBh va BL = FFh Instruction DIV BL IDIV BL Dec Quotient 0 OVERFLOW Dec Remainder 251 AX FB DX 00

72

6.4

M rong dau cua so b chia

Phep chia vi toan hang t Trong phep chia vi toan hang t , so b chia phai at tren DX:AX ngay ca khi so b chia co the at tren AX . Trong trng hp nay , can phai sa soan nh sau oi vi lenh DIV , DX phai b xoa oi vi lenh IDIV , DX phai c m rong dau cua AX . Lenh CWD ( Convert Word to Doubleword ) se thc hien viec nay . V du : Chia -1250 cho 7 MOV AX,-1250 ; AX= -1250 CWD ; m rong dau cua AX vao DX MOV BX,7 ; BX=7 IDIV BX ; chia DX:AX cho BX , ket qua tren AX , so d ; tren DX Phep chia vi toan hang byte Trong phep chia vi toan hang byte , so b chia phai at tren AX ngay ca khi so b chia co the at tren AL . Trong trng hp nay , can phai sa soan nh sau oi vi lenh DIV , AH phai b xoa oi vi lenh IDIV , AH phai c m rong dau cua AL . Lenh CBW ( Convert Byte to Doublebyte ) se thc hien viec nay . V du : Chia mot so co dau trong bien byte XBYTE cho -7 MOV AL, XBYTE ; AL gi so b chia CBW ; m rong dau cua AL vao AH MOV BL,-7 ; BX= -7 IDIV BL ; chia AX cho BL , ket qua tren AL , so d ; tren AH Khong co c nao b anh hng bi lenh CWD va CBW .

Chng 6 : Lenh nhan va chia

73

6.5

Thu tuc nhap xuat so thap phan

Mac du trong PC tat ca so lieu c bieu dien di dang binary . Nhng viec bieu dien di dang thap phan se thuan tien hn cho ngi dung . Trong phan nay chung ta se viet cac thu tuc nhap xuat so thap phan . Khi nhap so lieu , neu chung ta go 21543 chang han th thc chat la chung ta go vao mot chuoi ky t , ben trong PC , chung c bien oi thanh cac gia tr nh phan tng ng cua 21543 . Ngc lai khi xuat so lieu , noi dung nh phan cua thanh ghi hoac v tr nh phai c bien oi thanh mot chuoi ky t bieu dien mot so thap phan trc khi chung c in ra . Xuat so thap phan ( Decimal Output) Chung ta se viet mot thu tuc OUTDEC e in noi dung cua thanh ghi AX nh la mot so nguyen thap phan co dau . Neu AX>0 ,OUTDEC se in noi dung cua AX di dang thap phan . Neu AX<0 , OUTDEC se in dau tr (-) , thay AX = -AX ( oi thanb so dng ) roi in so dng nay sau dau tr (-). Nh vay la trong ca 2 trng hp , OUTDEC se in gia tr thap phan tng ng cua mot so dng . Sau ay la thuat toan : Algorithm for Decimal Output 1. IF AX < 0 / AX hold output value / 2. THEN 3. PRINT a minus sign 4. Replace AX by its twos complement 5. END_IF 6. Get the digits in AXs decimal representation 7. Convert these digits to characters and print them . e hieu chi tiet bc 6 can phai lam viec g , chung ta gia s rang noi dung cua AX la mot so thap phan , v du 24618 thap phan . Co the lay cac digits thap phan cua 24618 bang cach chia lap lai cho 10d theo thu tuc nh sau : Divide 24618 by 10 . Qoutient = 2461 , remainder = 8 Divide 2461 by 10 . Qoutient = 246 , remainder = 1 Divide 246 by 10 . Qoutient = 24 , remainder = 6 Divide 24 by 10 . Qoutient = 2 , remainder = 4 Divide 2 by 10 . Qoutient = 0 , remainder = 2 Cac digits thu c bang cach lay cac so d theo trat t ngc lai . Bc 7 cua thuat toan co the thc hien bang vong FOR nh sau :

Chng 6 : Lenh nhan va chia FOR count times DO pop a digit from the stack convert it to a character output the character END_FOR Code cho thu tuc OUTDEC nh sau : OUTDEC PROC ; Print AX as a signed decimal integer ; input : AX ; output : none PUSH AX ; save registers PUSH BX PUSH CX PUSH DX ; IF AX<0 OR AX,AX ; AX < 0 ? JGE @END_IF1 ; NO , AX>0 ; THEN PUSH AX ; save AX MOV DL,- ; GET - MOV AH,2 INT 21H ; print - POP AX ; get AX back NEG AX ; AX = -AX @END_IF1: ; get decimal digits XOR CX,CX ; clear CX for counts digit MOV BX,10d ; BX has divisor @REPEAT1: XOR DX,DX ; clear DX DIV BX ; AX:BX ; AX = qoutient , DX= remainder PUSH DX ; push remainder onto stack INC CX ; increment count ;until OR AX,AX ; qoutient = 0? JNE @REPEAT1 ; no keep going ; convert digits to characters and print MOV AH,2 ; print character function

74

Chng 6 : Lenh nhan va chia ; for count times do @PRINT_LOOP: POP DX ; digits in DL OR DL,30h ; convert digit to character INT 21H ; print digit LOOP @PRINT_LOOP ;end_for POP DX ; restore registers POP CX POP BX POP AX RET OUTDEC ENDP

75

Chung ta co the thay oi OUTDEC bang cach at no ben trong mot chng trnh ngan va chay chng trnh trong DEBUG . e a thu tuc OUTDEC vao trong chng trnh ma khong can go no , chung ta dung toan t gia INCLUDE vi cu phap nh sau : INCLUDE filespec ay filespec dung e nhan dang tap tin ( bao gom ca ng dan cua no ) . V du tap tin cha OUTDEC la PGM6_1.ASM o A: . Chung ta co the viet : INCLUDE A:\PGM6_1.ASM Sau ay la chng trnh e test thu tuc OUTDEC TITLE PGM6_2 : DECIMAL OUTPUT .MODEL SMALL .STACK 100h .CODE MAIN PROC CALL OUTDEC MOV AH,4CH INT 21H MAIN ENDP INCLUDE A:\PGM6_1.ASM END MAIN Sau khi dch , chung ta dung DEBUG nhap so lieu va chay chng trnh .

Toan t gia INCLUDE

Chng 6 : Lenh nhan va chia

76

Nhap Thap phan ( Decimal input) e nhap so thap phan chung ta can bien oi mot chuoi cac digits ASCII thanh bieu dien nh phan cua mot so nguyen thap phan . Chung ta se viet thu tuc INDEC e lam viec nay . Trong thu tuc OUTDEC chung ta chia lap cho 10d . Trong thu tuc INDEC chung ta se nhan lap vi 10d . Decimal Input Algorithm Total = 0 read an ASCII digit REPEAT convert character to a binary value total = 10x total +value read a chracter UNTIL chracter is a carriage return V du : neu nhap 123 th x ly nh sau : total = 0 read 1 convert 1 to 1 total = 10x 0 +1 =1 read 2 convert 2 to 2 total = 10x1 +2 =12 read 3 convert 3 to 3 total = 10x12 +3 =123 Sau ay chung ta se xay dng thu tuc INDEC sao cho no chap nhan c cac so thap phan co dau trong vung - 32768 en +32767 ( mot t ) . Chng trnh se in ra mot dau ? e nhac ngi dung go vao dau + hoac - , theo sau ola mot chuoi cac digit va ket thuc la ky t CR . Neu ngi dung go vao mot ky t khong phai la 0 en 9 th thu tuc se nhay xuong dong mi va bat au lai t au . Vi nhng yeu cau nh tren ay thu tuc nhap thap phan phai viet lai nh sau : Print a question mask Total = 0 negative = false Read a character CASE character OF - : negative = true read a chracter +; read a charcter

Chng 6 : Lenh nhan va chia END_CASE REPEAT IF character not between 0 and 9 THEN goto beginning ELSE convert character to a binary value total = 10xtotal + value IND_IF read acharacter UNTIL character is a carriage return IF negative = true then total = - total END_IF Thu tuc co the ma hoa nh sau ( ghi vao a A : vi ten la PGM6_2.ASM) INDEC PROC ; read a number in range -32768 to +32767 ; input : none ; output : AX = binary equvalent of number PUSH BX ; Save regiter PUSH CX PUSH DX ; print prompt @BEGIN: MOV AH,2 MOV DL,? INT 21h ; print ? ; total = 0 XOR BX,BX ; CX holds total ; negative = false XOR CX,CX ; cx holds sign ; read a character MOV AH,1 INT 21h ; character in AL ; CASE character of CMP AL,- ; minus sign JE @MINUS CMP AL,+ ; Plus sign

77

Chng 6 : Lenh nhan va chia JE @PLUS JMP @REPEAT2 ; start processing characters @MINUS: MOV CX,1 @PLUS: INT 21H @REPEAT2: ; if character is between 0 to 9 CMP AL,0 JNGE @NOT_DIGIT CMP Al,9 JNLE @NOT_DIGIT ; THEN convert character to digit AND AL,000FH ; convert to digit PUSH AX ; save digit on stack ; total =10x total + digit MOV AX,10 MUL BX ; AX= total x10 POP BX ; Retrieve digit ADD BX,AX ; TOTAL = 10XTOTAL + DIGIT ;read a character MOV AH,1 INT 21h CMP AL,0DH JNE @REPEAT ; until CR MOV AX,BX ; restore total in AX ; if negative OR CX,CX ; negative number JE @EXIT ; no exit ;then NEG AX ; end_if @EXIT: POP DX POP CX POP BX RET ; HERE if illegal character entered @NOT_DIGIT MOV AH,2

78

Chng 6 : Lenh nhan va chia MOV INT MOV INT JMP INDEC DL,0DH 21h DL,0Ah 21h @BEGIN ENDP

79

TEST INDEC Co the test thu tuc INDEC bang cach tao ra mot chng trnh dung INDEC cho nhap thap phan va OUTDEC cho xuat thap phan nh sau : TITLE PGM6_4.ASM .MODEL SMALL .STACK 100h .CODE MAIN PROC ; input a number CALL INDEC PUSH AX ; save number ; move cursor to a new line MOV AH,2 MOV DL,0DH INT 21h MOV DL,0Ah INT 21H ;output a number POP AX CALL OUTDEC ; dos exit MOV AH,4CH INT 21H MAIN ENDP INCLUDE A:\PGM6_1.ASM ; include outdec INCLUDE A:\PGM6-2.ASM ; include indec END MAIN

Chng 6 : Lenh nhan va chia

80

Chng 7 : Mang va cac che o a ch Chng 7: MANG VA CAC CHE O A CH

80

Trong chng nay chung ta se e cap en mang mot chieu va cac ky thuat x ly mang trong Assembly . Phan con lai cuachng nay se trnh bay cac che o a ch.

7.1

Mang mot chieu

Mang mot chieu la mot danh sach cac phan t cung loai va co trat t . Co trat t co ngha la co phan t th nhat , phan t th hai , phan t th ba ... Trong toan hoc , neu A la mot mang th cac phan t cua mang c nh ngha laA[1}, A[2] , A[3} ... Hnh ve la di ay la mang A co 6 phan t . Index 1 2 3 4 5 6

A[1] A[2] A[3] A[4] A[5] A[6]

Trong chng 1 chung ta a dung toan t gia DB va DW e khai bao mang byte va mang t . V du , mot chuoi 5 ky t co ten la MSG MSG DB abcde hoac mot mang t W gom 6 so nguyen ma gia tr ban au cua chung la 10,20,30,40.50 va 60 W DW 10,20,30,40,50,60 a ch cua bien mang goi la a ch c s cua mang ( base address of the array) . Trong mang W th a ch c s la 10 .Neu a ch offset cua W la 0200h th trong bo nh mang 6 phan t noi tren se nh sau : Offset address 0200h 0202h 0204h 0206h 0208h 020Ah Symbolic address W W+2h W+4h W+6h W+8h W+Ah Decimal content 10 20 30 40 50 60

Chng 7 : Mang va cac che o a ch Toan t DUP ( Duplicate) Co the nh ngha mot mang ma cac phan t cua no co cung mot gia tr ban au bang phep DUP nh sau : repeat_count DUP ( value) lap lai mot so ( VALUE) n lan ( n = repeat_count) V du : GAMMA

81

DUP (0) ; tao mot mang 100 t ma gia tr ban au la 0 . DELTA DB 212 DUP (?) ; tao mot mang 212 byte gia tr cha xac nh DUP co the long nhau , v du : LINE DB 5,4,3 DUP (2, 3 DUP (0) ,1) tng ng vi : LINE DB 5,4,2,0,0,0,1,2,0,0,0,1,2,0,0,0,1 V tr cac phan t cua mot mang a ch cua mot phan t cua mang co the c xac nh bang cach cong mot hang so vi a ch c s . Gia s A la mot mang va S ch ra so byte cua mot phan t cua mang ( S=1 oi vi mang byte va S=2 oi vi mang t ) . V tr cua cac phan t cua mang A co the tnh nh sau : Position 1 2 3 . . . N Location A A+1xS A+2xS . . . A+(N-1)xS

DW

100

V du : Trao oi phan t th 10 va th 25 cua mang t W . Phan t th 10 la W[10] co a ch la W+9x2=W+18 Phan t th 25 la W[25] co a ch la W+24x2=W+48 V vay co the trao oi chung nh sau : MOV AX,W+18 ; AX = W[10] XCHG W+48,AX ; AX= W[25] MOV W+18, AX ; complete exchange

7.2

Cac che o a ch ( addressing modes)

Chng 7 : Mang va cac che o a ch

82

Cach thc ch ra toan hang trong lenh goi la che o a ch . Cac che o a ch thng dung la : Che o a ch bang thanh ghi ( register mode) : toan hang la thanh ghi Che o a ch tc thi ( immediate mode) : toan hang la hang so Che o a ch trc tiep ( direct mode) : toan hang la bien V du : MOV AX,0 ; AX la register mode con 0 la immediate mode ADD ALPHA,AX ; ALPHA la direct mode Ngoai ra con co 4 che o a ch khac la : Che o a ch gian tiep bang thanh ghi ( register indirect mode ) Che o a ch c s ( based mode) Che o a ch ch so ( indexed mode) Che o a ch ch so s s ( based indexed mode) 7.2.1 Che o a ch gian tiep bang thanh ghi Trong che o a ch gian tiep bang thanh ghi , a ch offset cua toan hang c cha trong 1 thanh ghi . Chung ta noi rang thanh ghi la con tro ( pointer) cua v tr nh . Dang toan hang la [register]. Trong o register la cac thanh ghi BX, SI , DI , BP. oi vi cac thanh ghi BX , SI , DI th thanh ghi oan la DS . Con thanh ghi oan cua BP la SS . V du : gia s rang SI = 100h va t nh tai a ch DS:0100h co noi dung la 1234h . Lenh MOV AX,[SI] se copy 1234h vao AX . Gia s rang noi dung cac thanh ghi va noi dung cua bo nh tng ng la nh sau : Thanh ghi AX SI DI noi dung 1000h 2000h 3000h offset 1000h 2000h 3000h noi dung bo nh 1BACh 20FFh 031Dh

V du 1: Hay cho biet lenh nao sau ay la hp ly , offset nguon va ket qua cua cac lenh hp ly . a. MOV BX,[BX] b. MOV CX,[SI] c. MOV BX,[AX] d. ADD [SI],[DI] e. INC [DI]

Chng 7 : Mang va cac che o a ch

83

Li giai : Source offset 1000h 2000h illegal source register illegal memory-memory add 3000h Result 1BACh 20FFh ( must be BX,SI,DI) 031Eh

a. b. c. d. e.

V du 2 : Viet oan ma e cong vao AX 10 phan t cua mot mang W nh ngha nh sau : W DW 10,20,30,40,50,60,70,80,90,100 Giai : XOR AX,AX ; xoa AX LEA SI,W ; SI tro ti a ch c s ( base) cua mamg W . MOV CX,10 ; CX cha so phan t cua mang ADDITION: ADD AX,[SI] ; AX=AX + phan t th nhat ADD SI,2 ; tang con tro len 2 LOOP ADDITION ; lap V du 3 : Viet thu tuc e ao ngc mot mang n t . ieu nay co ngha la phan t th nhat se oi thanh phan t th n , phan t th hai se thanh phan t th n-1 ... Chung ta se dung SI nh la con tro cua mang con BX cha so phan t cua mang ( n t ) . Giai : So lan trao oi la N/2 lan . Nh rang phan t th N cua mang co a ch A+2x(N-1) oan ma nh sau : REVERSE PROC ; input: SI= offset of array ; BX= number of elements ; output : reverse array PUSH AX PUSH BX PUSH CX PUSH SI PUSH DI ; DI ch ti phan t th n

; cat cac thanh ghi

Chng 7 : Mang va cac che o a ch MOV MOV DEC SHL ADD DI,SI CX,BX BX BX,1 DI,BX

84

SHR CX,1 ; trao oi cac phan t XCHG_LOOP: MOV AX,[SI] ; lay 1 phan t na thap cua mang XCHG AX,[DI] ; a no len na cao cua mang MOV [SI],AX ; hoan thanh trao oi ADD SI,2 ; SI ch ti phan t tiep theo cua mang SUB DI,2 ; DI ch ti phan t th n-1 LOOP XCHG_LOOP POP DI POP SI POP CX POP BX POP AX RET REVERSE ENDP

; DI tro ti t th nhat ; CX=BX=n : so phan t ; BX=n-1 ;BX=2x(n-1) ;DI = 2x(n-1) + offset cua mang : ch ti phan t ; th n ;CX=n/2 : so lan trao oi

7.2.2 Che o a ch ch so va c s
Trong cac che o a ch nay , a ch offset cua toan hang co c bang cach cong mot so goi la displacement vi noi dung cua mot thanh ghi . Displacement co the la : a ch offset cua mot bien , v du A mot hang ( am hoac dng ), v du -2 a ch offset cua mot bien cong vi mot hang so , v du A+4 Cu phap cua mot toan hang co the la mot trong cac kieu tng ng sau : [ register + displacement] [displacement + register] [ register]+ displacement [ displacement]+ register displacement[register] Cac thanh ghi phai la BX , SI , DI ( a ch oan phai la thanh ghi DS) va BP ( thanh ghi SS cha a ch oan ) Che o a ch c goi la c s ( based) neu thanh ghi BX( base register) hoac BP ( base pointer) c dung .

Chng 7 : Mang va cac che o a ch

85

Che o a ch c goi la ch so ( indexed) neu thanh ghi SI( source index) hoac DI ( destination index) c dung . V du : Gia s rang W la mang t va BX cha 4 . Trong lenh MOV AX,W[BX} displacement la a ch offset cua bien W . Lenh nay se di chuyen phan t co ia ch W+4 vao thanh ghi AX . Lenh nay cung co the viet di cac dang tng ng sau : MOV AX, [W+BX] MOV AX, [BX+W] MOV AX, W+[BX] MOV AX, [BX]+W Lay v du khac , gia s rang SI cha a ch cua mang t W . Trong lenh MOV AX,[SI+2] displacement la 2 .Lenh nay se di chuyen noi dung cua t nh W+2 ti AX . Lenh nay cung co the viet di cac dang khac : MOV AX,[2+SI] MOV AX,2+[SI] MOV AX,[SI]+2 MOV AX,2[SI] Vi che o a ch c s co the viet lai code cho bai toan tnh tong 10 phan t cua mang nh sau : XOR AX,AX ; xoa AX XOR BX,BX ; xoa BX ( thanh ghi c s ) MOV CX,10 ; CX= so phan t =10 ADDITION: ADD AX,W[BX} ; sum=sum+element ADD BX,2 ; tro ti phan t th hai LOOP ADDITION V du : Gia s rang ALPHA c khai bao nh sau : ALPHA DW 0123h,0456h,0789h,0ADCDH trong oan c a ch bi DS va gia s rang : BX =2 [0002]= 1084h SI=4 [0004]= 2BACh DI=1 Ch ra cac lenh nao sau ay la hp le, a ch offset nguon va so c chuyen . a. b. MOV AX,[ALPHA+BX] MOV BX,[BX+2]

Chng 7 : Mang va cac che o a ch c. d. e. f. g. Giai : Source offset Number moved ALPHA+2 0456h 2+2 2BACh ALPHA+4 0789h -2+4=+2 1084h ALPHA+3+1=ALPHA+4 0789h illegal form source operand ...[BX]2 illegal ; thanh ghi AX la khong c phep MOV MOV MOV MOV MOV CX,ALPHA[SI} AX,-2[SI] BX,[ALPHA+3+DI] AX,[BX]2 BX,[ALPHA+AX]

86

a. b. c. d. e. d. g.

V du sau ay cho thay mot mang c x ly nh the nao bi che o a ch ch so va c s . V du : oi cac ky t viet thng trong chuoi sau thanh ky t viet hoa . MSG DB co ty lo lo ti ca Giai : MOV CX,17 ; so ky t cha trong CX=17 XOR SI,SI ; SI ch so cho ky t TOP: CMP MSG[SI], ; blank? JE NEXT ; yes , skip AND MSG[SI],0DFH ; oi thanh ch hoa NEXT: INC SI ; ch so ky t tiep theo LOOP TOP ; lap

7.2.3 Toan t PTR va toan t gia LABEL

Chng 7 : Mang va cac che o a ch

87

Trong cac chng trc chung ta a biet rang cac toan hang cua mot lenh phai cung loai , tc la cung la byte hoac cung la t .Neu mot toan hang la hang so th ASM se chuyen chung thanh loai tng ng vi toan hang kia . V du , ASM se thc hien lenh MOV AX,1 nh la lenh toan hang t . Tng t , ASM se thc hien lenh MOV BH,5 nh la lenh byte . Tuy nhien , lenh MOV [BX],1 la khong hp le v ASM khong biet toan hang ch bi thanh ghi BX la toan hang byte hay toan hang t . Co the khac phuc ieu nay bang toan t PTR nh sau : MOV BYTE PTR [BX],1 ; toan hang ch la toan hang byte MOV WORD PTR [BX],1 ; toan hang ch la toan hang t V du : Thay ky t t thanh T trong chuoi c nh ngha bi : MSG DB this is a message Cach 1: Dung che o a ch gian tiep thanh ghi : LEA SI,MSG ; SI tro ti MSG MOV BYTE PTR [SI],T ; thay t bang T Cach 2 : Dung che o a ch ch so : XOR SI,SI ; xoa SI MOV MSG[SI],T ; thay t bi T ay khong can dung PTR v MSG la bien byte . Noi chung toan t PTR c dung e khai bao loai ( type) cua toan hang . Cu phap chung cua no nh sau: Type PTR address_expression Trong o Type : byte , word , Dword Addres_expression : la cac bien a c khai bao bi DB,DW, DD . V du chung ta co 2 khai bao bien nh sau : DOLLARS DB 1AH CENTS DB 52H va chung ta muon di chuyen DOLLARS vao AL , di chuyen CENTS vao AH ch bang mot lenh MOV duy nhat . Co the dung lenh sau : MOV AX, WORD PTR DOLLARS ; AL=DOLLARS va AH=CENTS Toan t gia LABEL Co mot cach khac e giai quyet van e xung ot ve loai toan hang nh tren bang cach dung toan t gia LABEL nh sau ay : MONEY LABEL WORD DOLLARS DB 1AH CENTS DB 52H Cac lenh tren ay khai bao bien MONEY la bien t vi 2 thanh phan la DOLLARS va CENTS . Trong o DOLLRAS co cung a ch vi MONEY . Lenh MOV AX, MONEY Tng ng vi 2 lenh :

Chng 7 : Mang va cac che o a ch MOV AL, DOLLARS MOV AH, CENTS V du : Gia s rang so lieu c khai bao nh sau : .DATA A DW 1234h B LABEL BYTE DW 5678h C LABEL WORD C1 DB 9Ah C2 DB 0bch Hay cho biet cac lenh nao sau ay la hp le va ket qua cua lenh . a. MOV AX,B b. MOV AH,B c. MOV CX,C d. MOV BX,WORD PTR B e. MOV DL,WORD PTR C f. MOV AX, WORD PTR C1 Giai : a. khong hp le b. hp le , 78h c. hp le , 0BC9Ah d. hp le , 5678h e. hp le , 9Ah f. hp le , 0BC9Ah

88

Trong che o a ch gian tiep bang thanh ghi , cac thanh ghi con tro BX,SI hoac DI ch ra a ch offset con thanh ghi oan la DS . Cung co the ch ra mot thanh ghi oan khac theo cu phap sau : segment_register : [ pointer_register] V du : MOV AX, ES:[SI] neu SI=0100h th a ch cua toan hang nguon la ES:0100h Viec chiem oan cung co the dung vi che o a ch ch so va che o a ch c s .

7.2.4 Chiem oan ( segment override)

Nh chung ta a noi tren ay khi BP ch ra mot a ch offset trong che o a ch gian tiep bang thanh ghi , SS se cung cap so oan . ieu nay co ngha la co the dung dung BP e truy xuat stack .

7.2.5 Truy xuat oan stack

Chng 7 : Mang va cac che o a ch

89

V du : Di chuyen 3 t tai nh stack vao AX,BX,CX ma khong lam thay oi noi dung cua stack . MOV BP,SP ; BP ch ti nh stack MOV AX,[BP] ; copy nh stack vao AX MOV BX,[BP+2] ; copy t th hai tren stack vao BX MOV CX,[BP+4] ; copy t th ba vao CX

Viec tm kiem mot phan t tren mang se de dang neu nh mang c sap xep ( sort) . e sort mang A gom N phan t co the tien hanh qua N-1 bc nh sau : Bc 1: Tm so ln nhat trong so cac phan t A[1]...A[N] . Gan so ln nhat cho A[N] . Bc 2 : Tm so ln nhat trong cac so A[1]...A[N-1]. Gan so ln nhat cho A[N-1} . . . Bc N-1 : Tm so ln nhat trong 2 so A[1] va A[2}. Gan so ln nhat cho A[2} V du : gia s rang mang A cha 5 phan t la cac so nguyen nh sau : Position initial bc 1 bc 2 bc 3 bc 4 1 21 21 7 7 5 2 5 5 5 5 7 3 16 16 16 16 16 4 40 7 21 21 21 5 7 40 40 40 40

7.3

Sap xep so lieu tren mang

Thuat toan

Sau ay la chng trnh e sort cac phan trong mo mang . Chung ta se dung thu tuc SELECT e chon phan t tren mang . Thu tuc SELECT se go thu tuc SWAP e sap xep . Chng trnh chnh se nh sau :

i =N FOR N-1 times DO find the position k of the largest element among A[1]..A[i] Swap A[i] and A[k] ( uses procedure SWAP ) i=i-1 END_FOR

Chng 7 : Mang va cac che o a ch TITLE PGM7_3: TEST SELECT .MODEL SMALL .STACK 100H .DATA A DB 5,2,,1,3,4 .CODE MAIN PROC MOV AX,@DATA MOV DS,AX LEA SI,A MOV BX,5 ; so phan t cua mang cha trong BX CALL SELECT MOV AH,4CH INT 21H MAIN ENDP INCLUDE C:\ASM\SELECT.ASM END MAIN

90

Tap tin SELECT.ASM cha thu tuc SELECT vathu tuc SWAP c viet nh sau tai C:\ASM . SELECT PROC ; sap xep mang byte ; input: SI = a ch offset cua mang BX= so phan t ( n) cua mang ; output: SI = ia ch offset cua mang a sap xep . ; uses : SWAP PUSH BX PUSH CX PUSH DX PUSH SI DEC BX ; N = N-1 JE END_SORT ; Neu N=1 th thoat MOV DX,SI ; cat a ch offfset cua mang vao DX

; lap N-1 lan SORT_LOOP: MOV MOV MOV

SI,DX CX,BX DI,SI

; SI tro ti mang A ; CX = N -1 so lan lap ; DI ch ti phan t th nhat

Chng 7 : Mang va cac che o a ch MOV AL,[DI] ; AL cha phan t th nhat ; tm phan t ln nhat FIND_BIG: INC SI ; SI tro ti phan t tiep theo CMP [SI],AL ; phan t tiep theo > phan t th nhat ING NEXT ; khong , tiep tuc MOV DI,SI ; DI cha a ch cua phan t ln nhat MOV AL,[DI] ; AL cha phan t ln nhat NEXT: LOOP FIND_BIG ; swap phan t ln nhat vi phan t cuoi cung CALL SWAP DEC BX ; N= N-1 JNE SORT_LOOP ; lap neu N<>0 END_SORT: POP SI POP DX POP CX POP BX RET SELECT ENDP SWAP PROC ; oi cho 2 phan t cua mang ; input : SI= phan t th nhat ; DI = phan t th hai ; output : cac phan t a trao oi PUSH AX ; cat AX MOV AL,[SI] ; lay phan t A[i] XCHG AL,[DI] ; at no tren A[k] MOV [SI],AL ; at A[k] tren A[i] POP AX ; lay lai AX RET SWAP ENDP

91

Sau khi dch chng trnh , co the dung DEBUG e chay th va test ket qua .

7.4

Mang 2 chieu

Mang 2 chieu la mot mang cua mot mang , ngha la mot mang 1 chieu ma cac phan t cua no la mot mang 1 chieu khac . Co the hnh dung mang 2 chieu nh mot ma tran ch nhat . V du mang B gom co 3 hang va 4 cot ( mang 3x4) nh sau :

Chng 7 : Mang va cac che o a ch ROW \ COLUMN 1 2 3 1 B[1,1] B[2,1] B[3,1] 2 B[1,2] B[2,2] B[3,2] 3 B[1,3] B[2,3] B[3,3] 4 B[1,4] B[2,4] B[3,4]

92

Bi v bo nh la 1 chieu v vay cac phan t cua mang 2 chieu phai c lu tr tren bo nh theo kieu lan lt . Co 2 cach c dung : Cach 1 la lu tr theo th t dong : tren mang lu tr cac phan t cua dong 1 roi en cac phan t cua dong 2 ... Cach 2 la lu tr theo th t cot : tren mang lu tr cac phan t cua cot 1 roi en cac phan t cua cot 2... Gia s mang B cha 10,20,30,40 tren dong 1 cha 50,60,70,80 tren dong 2 cha 90,100,110,120 tren dong 3 Theo trat t hang chung c lu tr nh sau : B DW 10,20,30,40 DW 50,60,70,80 DW 90,100,110,120 Theo trat t cot chung c lu tr nh sau : B DW 10,50,90 DW 20,60,100 DW 30,70,110 DW 40,80,120 Hau het cac ngon ng cap cao bien dch mang 2chieu theo trat t dong . Trong ASM , chung ta co the dung mot trong 2 cach : Neu cac thanh phan cua mot hang c x ly lan lt th cach lu tr theo trat t hang c dung . Ngc lai th dung cach lu tr theo trat t cot . Xac nh mot phan t tren mang 2 chieu : Gia s rang mang A gom MxN phan t lu tr theo trat t dong . Go S la o ln cua mot phan t : S=1 neu phan t la byte , S=2 neu phan t la t . e tm phan t th A[i,j] th can tm : hang i va tm phan t th j tren hang nay . Nh vay phai tien hanh qua 2 bc : Bc 1: Hang 1 bat au tai v tr A . V moi hang co N phan t , do o Hang 2 bat au tai A+ NxS . Hang 3 bat au tai A+2xNxS . Hang th i bat au tai A+(i-1)xSxN . Bc 2: Phan t th j tren mot hang cach v tr au hang (j-1)xS byte T 2 bc tren suy ra rang trong mang 2 chieu NxM phan t ma chung c lu tr theo trat t hang th phan t A[i,j] co a ch c xac nh nh sau : A+((i-1)xN + (j-1))x S (1)

Chng 7 : Mang va cac che o a ch

93

Tng t neu lu tr theo trat t cot th phan t A[i,j] co a ch nh sau : A+(i-1)+(j--)xM)xS (2) V du : Gia s A la mang MxN phan t kieu t ( S=2) c lu tr theo kieu trat t hang . Hoi : Hang i bat au tai a ch nao ? Cot j bat au tai ia ch nao ? Hai phan t tren mot cot cach nhau bao nhieu bytes Giai : Hang i bat au tai A[i,1] theo cong thc (1) th no co a ch la : A+(i-1)xNx2 Cot j bat au tai A[1,j ] theo cong thc (1) th no co a ch : A+(j-1)x2 V co N cot nen 2 phan t tren cung mot cot cach nhau 2xN byte . 7.5 Che o a ch ch so c s Trong che o nay , a ch offset cua toan hang la tong cua : 1. noi dung cua thanh ghi c s ( BX or BP) 2. noi dung cua thanh ghi ch so ( SI or DI) 3. a ch offset cua 1 bien ( tuy chon) 4. mot hang am hoac dng ( tuy chon) Neu thanh ghi BX c dung th DS cha so oan cua a ch toan hang .Neu BP c dung th SS cha so oan . Toan hang c viet theo 4 cach di ay: 1. variable[base_register][index_register] 2. [base_register + index_register + variable + constant ] 3. variable [ base_register + index_register + constant] 4. constant [ base _ register + index_register + variable] Trat tc cua cac thanh phan trong dau ngoac la tuy y . V du , gia s W la bien t , BX=2 va SI =4 . Lenh MOV AX, W[BX][SI] se di chuyen noi dung cua mang tai a ch W+2+4 = W+6 vao thanh ghi AX Lenh nay cung co the viet theo 2 cach sau : MOV AX,[W+BX+SI] MOV AX,W[BX+SI] Che o a ch ch so c s thng c dung e x ly mang 2 chieu nh v du sau : Gia s rang A la mang 5x7 t c lu tr theo trat t dong . Viet oan ma dung che o a ch ch so e : 1) xoa dong 3 2) xoa cot 4 Giai : 1) Dong i bat au tai A+(i-1)xNx2 . Nh vay dong 3 bat au tai A+(2-1)x7x2 = A + 28 . Co the xoa dong 3 nh sau : MOV BX,28 ; BX ch en au dong 3

Chng 7 : Mang va cac che o a ch

94

XOR SI,SI ; SI se ch muc cot MOV CX,7 ; CX= so phan t cua mot hang CLEAR: MOV A[BX][SI],0 ; xoa A[3,1] ADD SI,2 ; en cot tiep theo LOOP CLEAR 2) Cot j bat au tai ia ch A + (j-1)x2 . Vay cot 4 bat au tai ia ch A+(41)x2 = A+ 6 . Hai phan t tren mot cot cach nhau Nx2 byte , ay N=7 , vay 2 phan t cach nhau 14 byte . Co the xoa cot 4 nh sau : MOV SI,6 ; SI ch en cot 4 XOR BX,BX ; BX ch en hang MOV CX,5 ; CX= 5 : so phan t tren mot cot CLEAR: MOV A[BX][SI],0 ; Xoa A[i,4] ADD BX,1 ; en dong tiep theo LOOP CLEAR 7.6 ng dung e tnh trung bnh

Gia s mot lp gom 5 sinh vien va co 4 mon thi . Ket qua cho bi mang 2 chieu nh sau : Ten Sinh vien MARY SCOTT GEORGE BETH SAM TEST1 67 70 82 80 78 TEST2 45 56 72 67 76 TEST3 98 87 89 95 92 TEST4 33 44 40 50 60

Chung ta se viet1 chng trnh tnh iem trung bnh cho moi bai thi . e lam ieu nay co the tong theo cot roi chia cho 5 . Thuat toan : 1. j = 4 2. repeat 3. Sum the scores in column j 4. divide sum by 5 to get average in column j 5. j = j - 1 5. Until j = 0

Chng 7 : Mang va cac che o a ch Trong o bc 3 co the lam nh sau : Sum[j]= 0 i=1 FOR 5 times DO Sum[j]= Sum[j]+ Score[i, j] i=i+1 END_FOR Chng trnh co the viet nh sau : TITLE PGM7_4 : CLASS AVERAGE .MODEL SMALL .STACK 100H .DATA FIVE DB 5 SCORES DW 67,45,98,33 ; MARY DW 70,56,87,44 ;SCOTT DW 82,72,89,40 ;GEORGE DW 80,67,,95,50 ; BETH DW 78,76,92,60 ;SAM AVG DW 5 DUP (0) .CODE MAIN PROC MOV AX,@DATA MOV DS,AX ;J=4 REPEAT: MOV SI,6 ; SI ch en cot th 4 XOR BX,BX ; BX ch hang th nhat XOR AX,AX ; AX cha tong theo cot ; Tong iem tren cot j FOR: ADD AX , SCORES[BX+SI] ADD BX,8 ; BX ch en hang th 2 LOOP FOR ; end_for ; tnh trung bnh cot j XOR DX,DX ; xoa phan cao cua so b chia (DX:AX) DIV FIVE ; AX = AX/5 MOV AVG[SI],AX ; cat ket qua tren mang AVG SUB SI,2 ; en cot tiep ; un til j=0 JNL REPEAT

95

Chng 7 : Mang va cac che o a ch ;DOS EXIT MOV AH,4CH INT 21H MAIN ENDP END MAIN

96

Sau khi bien dch chng tenh co the dung DEBUG e chay va xem ket qua bang lenh DUMP.

Trong mot so ng dung can phai chuyen so lieu t dang nay sang dang khac . V du IBM PC dung ASCII code cho cac ky t nhng IBM Mainframes dung EBCDIC ( Extended Binary Coded Decimal Interchange Code) . e chuyen mot chuoi ky t a c ma hoa bang ASCII thanh EBCDIC , mot chng trnh phai thay ma ASCII cua tng ky t trong chuoi thanh ma EBCDIC tng ng . Lenh XLAT ( khong co toan hang ) c dung e oi mot gia tr byte thanh mot gia tr khac cha trong mot bang . AL phai cha byte can bien oi DX cha ia ch offset cua bang can bien oi Lenh XLAT se : 1) cong noi dung cua AL vi a ch tren BX e tao ra ia ch trong bang 2) thay the gia tr cua AL vi gia tr tm thay trong bang V du , gia s rang noi dung cua AL la trong vung 0 en Fh va chung ta muon thay no bang ma ASCII cua so hex tng ng no , tc la thay 6h bang 036h=6 , thay Bh bang 042h=B . Bang bien oi la : TABLE DB 030h ,031h , 032h ,033h ,034h , 035h , 036h, 037h,038h,039h DB 041h , 042h ,043h , 044h, 045h , 046h V du , e oi 0Ch thanh C , chung ta thc hien cac lenh sau : MOV AL,0Ch ; so can bien oi LEA BX,TABLE ; BX cha ia ch offset cua bang XLAT ; AL cha C ay XLAT tnh TABLE + Ch = TABLE +12 va thay the AL bi 043h . Neu AL cha mot so khong trong khoang 0 en 15 th XLAT se cho mot gia tr sai . V du : Ma hoa va giai ma mot thong iep mat Chng trnh nay se : Nhac nh ngi dung nhap vao mot thong iep Ma hoa no di dang khong nhan biet c , In chung ra dong tiep theo Dch chung tr lai dang ban au roi in chung dong tiep theo Khi chay ct man hnh se co dang sau :

7.7

Lenh XLAT

Chng 7 : Mang va cac che o a ch ENTER A MESSAGE : DAI HOC DA LAT ; input OXC BUC OX EXK ; encode DAI HOC DA LAT ; translated Thuat toan nh sau : Print prompt Read and encode message Go to anew line Print encoded message go to a new line translate and print message

97

TITLE PGM7_5 : SECRET MESSAGE .MODEL SMALL .STACK 100H .DATA ;ALPHABET ABCDEFGHIJKLMNOPQRSTUVWXYZ CODE_KEY DB 65 DUP ( ), XQPOGHZBCADEIJUVFMNKLRSTWY DB 37 DUP ( ) ; 128 ky t cua bang ma ASCII CODED DB 80 dup ($) ; 80 ky t c go vao DECODE_KEY DB 65 DUP ( ), JHIKLQEFMNTURSDCBVWXOPYAZG DB 37 DUP ( ) PROMPT DB ENTER A MESSAGE :,0DH,0AH,$ CRLF DB 0DH,0AH,$ .CODE MAIN PROC MOV AX,@DATA MOV DS, AX ; in dau nhac MOV AH,9 LEA DX,PROMPT INT 21H ; oc va ma hoa ky t MOV AH,1 LEA LEA BX,CODE_KEY DI, CODED ; BX ch ti CODE_KEY ; DI ch ti thong iep a ma hoa

Chng 7 : Mang va cac che o a ch WHILE_: INT 21h CMP AL,0DH JE ENDWHILE XLAT MOV [DI],AL JMP WHILE_ ; xuong hang MOV AH,9 LEA DX,CRLF INT 21H ; in thong iep a ma hoa LEA DX,CODED INT 21H ; xuong hang LEA DX,CRLF INT 21H ; giai ma thong iep va in no MOV AH,2 LEA BX,DECODE_KEY LEA SI,CODED WHILE1: MOV AL,[SI] CMP AL.$ JE ENDWHILE1 XLAT MOV DL,AL INT 21H INC SI JMP WHILE1 ENDWHILE1: MOV AH,4CH INT 21H MAIN ENDP END MAIN

98

; oc ky t vao AL ; co phai la ky t CR ; ung , en phan in thong iep a ma hoa ; ma hoa ky t ; cat ky t trong CODE ; x ly ky t tiep theo

; BX cha ia ch bang giai ma ; SI ch ti thong iep a ma hoa ; lay ky t t thong iep a ma hoa ; co phai cuoi thong iep ; ket thuc ; giai ma ;at ky t vao DL ; in ky t ; SI=SI+1 ; tiep tuc

Trong chng trnh co oan so lieu vi cac khai bao sau : ; ALPHABET ABCDEFGHIJKLMNOPQRSTUVWXYZ Cho biet bang cha cai tieng Anh CODE_KEY DB 65 DUP ( ), XQPOGHZBCADEIJUVFMNKLRSTWY

Chng 7 : Mang va cac che o a ch

99

DB 37 DUP ( ) Khai bao 128 ky t cua bang ma ASCII , trong o th t cac ky t hoa la tuy y . CODED DB 80 dup ($) 80 ky t c go vao , gia tr ban au la $ e co the in bang ham 9 ngat 21h DECODE_KEY DB 65 DUP ( ), JHIKLQEFMNTURSDCBVWXOPYAZG DB 37 DUP ( ) Bang giai ma c thiet lap theo cach ma hoa , ngha la trong phan ma hoa chung ta a ma hoa A thanh X v vay khi giai ma X phai giai ma thanh A ... Cac ky t go vao khong phai la ky t hoa eu c chuyen thanh ky t trong.

You might also like