Bài giảng Lập trình hợp ngữ - Chương 8: Cấu trúc điều khiển và vòng lặp

Chöông 8 : Caáu truùc ñieàu khieån vaø Voøng laëp  
Muïc tieâu  
Bieát caùch moâ phoûng caáu truùc ñieàu khieån vaø voøng laëp nhö ôû ngoân ngöõ  
laäp trình caáp cao.  
Naém ñöôïc caùc leänh nhaûy trong laäp trình Assembly.  
Treân cô sôû ñoù, vaän duïng ñeå laäp trình giaûi quyeát 1 soá baøi toaùn.  
1
Chuong 8 : Cau truc DK va Vong lap  
Noädung  
✓ Söï caàn thieát cuûa leänh nhaûy trong laäp trình ASM.  
✓ Leänh JMP (Jump) : nhaûy khoâng ñieàu kieän.  
✓ Leänh LOOP : cho pheùp laëp 1 coâng vieäc vôùi 1 soá laàn naøo ñoù.  
✓ Caùc leänh so saùnh vaø luaän lyù.  
✓ Leänh laëp coù ñieàu kieän.  
✓ Leänh nhaûy coù ñieàu kieän.  
✓ Bieåu dieãn moâ phoûng caáu truùc luaän lyù möùc cao.  
✓ Chöông trình con.  
✓ Moät soá chöông trình minh hoïa.  
2
Chuong 8 : Cau truc DK va Vong lap  
Söï caàn thieát cuûa leänh nhaûy  
Ôcaùc chöông trình vieát baèng ngoân ngöcaáp cao thì  
vieäc nhaûy (leänh GoTolañieàu neân traùnh nhöng ôlaäp  
trình hethoáng thñaây lavieäc caàn thieát valañieåm  
maïnh cuûa 1 chöông trình vieábaèng Assembl.  
Moäleänh nhaûy ➔ CPU phaûthöïc th1 ñoaïn leänh ô1  
chokhaùc vônômacaùc leänh ñang ñöôïc thöïc th.  
Trong laäp trìnhconhöõng nhoùm phaùt bieåu caàn phaûi  
laëp ñlaëp laïnhieàu laàn trong 1 ñieàu kieän naøo ñÑeå  
ñaùp öùng ñieàu kieän naøy ASM cung caáp 2 leänh JMP vaø  
LOO.  
3
Chuong 8 : Cau truc DK va Vong lap  
Leänh JMP (Jump)  
Coâng duïng :Chuyeån ñieàu khieån khoâng ñieàu  
kie
Cuù phaùp : JMP ñích  
Nhaûy gaàn (NEAR) : 1 taùc vuï nhaûy trong cuøng 1  
segment.  
Nhaûy xa (FAR) : 1 taùc vuï nhaûy sang segment  
khaùc.  
4
Chuong 8 : Cau truc DK va Vong lap  
Cacù leänh chuyeån ñieàu khieån  
Chuyeån ñieàu khieån voâ ñieàu kieän  
JMP [ SORT | NEAR PTR |FAR PTR ] DEST  
Chuyeån ñieàu khieån coù ñieàu kieän  
JConditional destination  
Ex : JNZ nhaõn ñích ;  
5
Chuong 8 : Cau truc DK va Vong lap  
LEÄNH LOOP  
Coâng duïng : cho pheùp laëp 1 coâng vieäc vôùi 1 soá laàn naøo ñoù.  
Moãi laàn laëp CX giaûm ñi 1 ñôn vò. Voøng laëp chaám döùt khi CX =0.  
Ex 1 : xuaát ra maøn hình 12 doøng goàm caùc kyù töï A.  
MOV CX, 12 * 80  
MOV DL, ‘A’  
NEXT :  
MOV AH, 2  
INT 21H  
LOOP NEXT  
6
Chuong 8 : Cau truc DK va Vong lap  
LOOP (tt)  
Ex : coù 1 Array A goàm 6 bytes, cheùp A sang array B – duøng SI vaø  
DI ñeå laáy Offset  
MOV SI, OFFSET A  
MOV DI, OFFSET B  
MOV CX, 6  
MOVE_BYTE :  
MOV AL, [SI]  
MOV [DI], AL  
INC SI  
INC DI  
LOOP MOVE_BYTE  
A DB 10H,20H,30H,40H,50H,60H  
B DB 6 DUP (?)  
7
Chuong 8 : Cau truc DK va Vong lap  
CAÙC LEÄNH LUAÄN LYÙ  
Löu yù veà caùc toaùn töû LOGIC :  
AND 2 Bit : keát quaû laø 1 khi vaø chæ khi 2 bit laø 1  
OR 2 Bit : keát quaû laø 1 khi 2 Bit coù bit laø 1  
XOR 2 Bit : keát quaû laø 1 chæ khi 2 bit khaùc nhau  
NOT 1 Bit : laáy ñaûo cuûa Bit naøy  
Löu yù veà thanh ghi côø :  
Côø ZERO ñöôïc laäp khi taùc vuï cho keát quaû laø 0.  
Côø CARRY ñöôïc laäp khi coäng keát quaû bò traøn hay tröø phaûi möôïn.  
Côø SIGN ñöôïc laäp khi bit daáu cuûa keát quaû laø 1, töùc keát quaû laø soá aâm.  
8
Chuong 8 : Cau truc DK va Vong lap  
Leänh AND  
Cuù phaùp : AND Destination , Source  
Coâng duïng :  
Leänh naøy thöïc hieän pheùp AND giöõa 2 toaùn haïng, keát quaû cuoái  
cuøng chöùa trong toaùn haïng ñích.  
Duøng ñeå xoùa caùc bit nhaát ñònh cuûa toaùn haïng ñích giöõ nguyeân  
caùc bit coøn laïi.  
Muoán vaäy ta duøng 1 maãu bit goïi laø maët naï bit (MASK),  
caùc bit maët naï ñöôïc choïn ñeå sao cho caùc bit töông öùng  
cuûa ñích ñöôïc thay ñoåi nhö mong muoán.  
9
Chuong 8 : Cau truc DK va Vong lap  
Leänh AND  
Ex1 : xoaù bit daáu cuûa AL, giöõ nguyeân caùc bit coøn laïi :  
duøng AND vôùi 01111111b laøm maët naï  
AND AL, 7FH  
Ex2 :  
MOV AL, ‘5’ ; Ñoåi maõ ASCII cuûa soá  
AND AL, 0FH ; thaønh soá töông öùng.  
Mask bits  
Ex3 :  
MOV DL, ‘a’ ; Ñoåi chöõ thöôøng thaønh chöõ hoa.  
AND DL, 0DFH ; thaønh soá töông öùng.  
Mask bits  
10  
Chuong 8 : Cau truc DK va Vong lap  
LEÄNH OR  
Coâng duïng : duøng ñeå baät leân 1 soá bit vaø giöõ nguyeân caùc bit khaùc.  
Cuù phaùp : OR destination, source  
Ex1 :  
OR AL , 10000001b ; baät bit cao nhaát vaø bit thaáp nhaát trong thanh ghi AL leân 1  
Ex 2:  
MOV AL , 5 ; ñoåi 0..9 thaønh kyù soá  
OR AL , 30h ; ASCII töông öùng.  
Ex 3:  
OR AL , AL ; kieåm tra moät thanh ghi coù = 0.  
Neáu : côø ZF ñöôïc laäp ➔ AL =0  
côø SIGN ñöôïc laäp ➔ AL <0  
côø ZR vaø côø SIGN khoâng ñöôïc laäp ➔ AL >0  
11  
Chuong 8 : Cau truc DK va Vong lap  
Vieäc xoaù 1 thanh ghi  
Ta coù 3 caùch ñeå xoaù 1 thanh ghi :  
C1: MOV AX , 0  
C2 : SUB AX, AX  
C3 : XOR AX, AX  
Maõ leänh 1 daøi 3 bytes  
➔ Leänh 2,3  
hieäu quaû hôn  
Maõ leänh 2 vaø 3 daøi 2 bytes  
Tuy nhieân caùc thao taùc giöõa oâ  
nhôù vaø oâ nhôù laø khoâng hôïp leä  
neân khi caàn xoaù 1 oâ nhôù ta  
phaûi duøng leänh 1 .  
12  
Chuong 8 : Cau truc DK va Vong lap  
LEÄNH XOR  
Coâng duïng : duøng ñeå taïo ñoà hoïa maøu toác ñoä cao.  
Cuù phaùp : XOR destination, source  
Ex : laät bit cao cuûa AL 2 laàn  
MOV AL , 00111011b ;  
XOR AL, 11111111b ; AL = 11000100b  
XOR AL, 11111111b ; AL = 00111011b  
13  
Chuong 8 : Cau truc DK va Vong lap  
LEÄNH TEST  
Cuù phaùp : TEST destination, source  
Coâng duïng : duøng ñeå khaûo saùt trò cuûa töøng bit hay nhoùm bit.  
Test thöïc hieän gioáng leänh AND nhöng khoâng laøm thay ñoåi toaùn haïng ñích.  
Ex : kieåm tra bit 13 trong DX laø 0 hay 1  
TEST DX, 2000h  
Ñeå kieåm tra 1 bit naøo ñoù chæ caàn  
ñaët bit 1 vaøo ñuùng vò trí bit caàn  
JZ BitIs0  
BitIs1 : bit 13 is 1  
BitIs0 : bit 13 is 0  
kieåm tra vaø khaûo saùt côø ZF.  
(neáu bit kieåm laø 1 thì ZF seõ xoaù,  
ngöôïc laïi ZF ñöôïc laäp.  
14  
Chuong 8 : Cau truc DK va Vong lap  
MINH HOÏA LEÄNH TEST  
Ex : kieåm tra traïng thaùi maùy in. Interrupt 17H trong BIOS seõ kieåm tra  
traïng thaùi maùy in, sau khi kieåm tra AL seõ chöùa traïng thaùi maùy in. Khi bit 5  
cuûa AL laø 1 thì maùy in heát giaáy.  
MOV AH, 2  
INT 17h  
TEST AL , 00100000b ; Test bit 5, neáu bit 5 = 1➔ maùy in heát giaáy.  
Leänh TEST cho pheùp test nhieàu bit 1 löôït.  
15  
Chuong 8 : Cau truc DK va Vong lap  
MINH HOÏA LEÄNH TEST(tt)  
Ex :vieát ñoaïn leänh thöïc hieän leänh nhaûy ñeán nhaõn A1 neáu AL chöùa soá  
chaün.  
TEST AL, 1 ; AL chöùa soá chaún ?  
JZ A1 ; neáu ñuùng nhaûy ñeán A1.  
16  
Chuong 8 : Cau truc DK va Vong lap  
Leänh CMP  
Cuù phaùp : CMP destination , source  
Coâng duïng : so saùnh toaùn haïng ñích vôùi toaùn haïng nguoàn  
baèng caùch laáy toaùn haïng ñích – toaùn haïng nguoàn.  
Hoaït ñoäng : duøng pheùp tröø nhöng khoâng coù toaùn haïng  
ñích naøo bò thay ñoåi.  
Caùc toaùn haïng cuûa leänh CMP khoâng theå cuøng laø caùc oâ nhôù.  
leänh CMP gioáng heät leänh SUB tröø vieäc toaùn haïng ñích khoâng thay ñoåi.  
17  
Chuong 8 : Cau truc DK va Vong lap  
LEÄNH NHAÛY COÙ ÑIEÀU KIEÄN  
Cuù phaùp : Jconditional destination  
Coâng duïng : nhôø caùc leänh nhaûy coù ñieàu kieän, ta môùi moâ phoûng ñöôïc caùc phaùt bieåu  
coù caáu truùc cuûa ngoân ngöõ caáp cao baèng Assembly.  
Phaïm vi  
Chæ nhaûy ñeán nhaõn coù khoaûng caùch töø -128 ñeán +127 byte so vôùi  
vò trí hieän haønh.  
Duøng caùc traïng thaùi côø ñeå quyeát ñònh coù nhaûy hay khoâng?  
18  
Chuong 8 : Cau truc DK va Vong lap  
LEÄNH NHAÛY COÙ ÑIEÀU KIEÄN  
Hoaït ñoäng  
ñeå thöïc hieän 1 leänh nhaûy CPU nhìn vaøo caùc thanh ghi côø.  
neáu ñieàu kieän cuûa leänh nhaûy thoûa, CPU seõ ñieàu chænh IP troû ñeán  
nhaõn ñích caùc leänh sau nhaõn naøy seõ ñöôïc thöïc hieän.  
……………  
PRINT_LOOP :  
INT 21H  
MOV AH, 2  
MOV CX, 26  
MOV DL, 41H  
INC DL  
DEC CX  
JNZ PRINT_LOOP  
MOV AX, 4C00H  
INT 21H  
19  
Chuong 8 : Cau truc DK va Vong lap  
LEÄNH NHAÛY DÖÏA TREÂN KEÁT QUAÛ SO SAÙNH  
CAÙC TOAÙN HAÏNG KHOÂNG DAÁU.  
Thöôøng duøng leänh CMP Opt1 , Opt2 ñeå xeùt ñieàu kieän nhaûy hoaëc  
döïa treân caùc côø.  
JZ Nhaûy neáu keát quaû so saùnh = 0  
JE Nhaûy neáu 2 toaùn haïng baèng nhau  
JNZ Nhaûy neáu keát quaû so saùnh laø khaùc nhau.  
JNE Nhaûy neáu 2 toaùn haïng khaùc nhau.  
JA Nhaûy neáu Opt1 > Opt2  
JNBE Nhaûy neáu Opt1 <= Opt2  
JAE Nhaûy neáu Opt1 >= Opt2  
20  
JNB Nhaûy
 
neáu Not (Opt1<Opt2)  
Tải về để xem bản đầy đủ
ppt 52 trang baolam 18260 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hợp ngữ - Chương 8: Cấu trúc điều khiển và vòng lặp", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pptbai_giang_lap_trinh_hop_ngu_chuong_8_cau_truc_dieu_khien_va.ppt