Bài giảng Công nghệ thông tin - Chương 8: Cấu trúc điều khiển và vòng lặp

ppt 52 trang huongle 3000
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Công nghệ thông tin - 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 bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_cong_nghe_thong_tin_chuong_8_cau_truc_dieu_khien_v.ppt

Nội dung text: Bài giảng Công nghệ thông tin - Chương 8: Cấu trúc điều khiển và vòng lặp

  1. Chöông 8 : Caáu truùc ñieàu khieån vaø Voøng laëp 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. Chuong 8 : Cau truc DK va Vong lap 1
  2. Noäi dung ü SöïSöï caàncaàn thieátthieát cuûacuûa leänhleänh nhaûynhaûy trongtrong laäplaäp trìnhtrình ASM.ASM. ü LeänhLeänh JMPJMP (Jump)(Jump) :: nhaûynhaûy khoângkhoâng ñieàuñieàu kieän.kieän. ü LeänhLeänh LOOPLOOP :: chocho pheùppheùp laëplaëp 11 coângcoâng vieäcvieäc vôùivôùi 11 soásoá laànlaàn naøonaøo ñoù.ñoù. ü CaùcCaùc leänhleänh soso saùnhsaùnh vaøvaø luaänluaän lyù.lyù. ü LeänhLeänh laëplaëp coùcoù ñieàuñieàu kieän.kieän. ü LeänhLeänh nhaûynhaûy coùcoù ñieàuñieàu kieän.kieän. ü BieåuBieåu dieãndieãn moâmoâ phoûngphoûng caáucaáu truùctruùc luaänluaän lyùlyù möùcmöùc cao.cao. ü ChöôngChöông trìnhtrình con.con. ü MoätMoät soásoá chöôngchöông trìnhtrình minhminh hoïa.hoïa. Chuong 8 : Cau truc DK va Vong lap 2
  3. Söï caàn thieát cuûa leänh nhaûy ÔÛÔÛ caùccaùc chöôngchöông trìnhtrình vieátvieát baèngbaèng ngoânngoân ngöõngöõ caápcaáp caocao thìthì vieäcvieäc nhaûynhaûy (leänh(leänh GoTo)GoTo) laølaø ñieàuñieàu neânneân traùnhtraùnh nhöngnhöng ôûôû laäplaäp trìnhtrình heäheä thoángthoáng thìthì ñaâyñaây laølaø vieäcvieäc caàncaàn thieátthieát vaøvaø laølaø ñieåmñieåm maïnhmaïnh cuûacuûa 11 chöôngchöông trìnhtrình vieátvieát baèngbaèng Assembly.Assembly. MoätMoät leänhleänh nhaûynhaûy CPUCPU phaûiphaûi thöïcthöïc thithi 11 ñoaïnñoaïn leänhleänh ôûôû 11 choãchoã khaùckhaùc vôùivôùi nôinôi maømaø caùccaùc leänhleänh ñangñang ñöôïcñöôïc thöïcthöïc thi.thi. TrongTrong laäplaäp trình,trình, coùcoù nhöõngnhöõng nhoùmnhoùm phaùtphaùt bieåubieåu caàncaàn phaûiphaûi laëplaëp ñiñi laëplaëp laïilaïi nhieàunhieàu laànlaàn trongtrong 11 ñieàuñieàu kieänkieän naøonaøo ñoù.ñoù. ÑeåÑeå ñaùpñaùp öùngöùng ñieàuñieàu kieänkieän naøynaøy ASMASM cungcung caápcaáp 22 leänhleänh JMPJMP vaøvaø LOOP.LOOP. Chuong 8 : Cau truc DK va Vong lap 3
  4. Leänh JMP (Jump) Coâng duïng :Chuyeån ñieàu khieån khoâng ñieàu kieän. • 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. Chuong 8 : Cau truc DK va Vong lap 4
  5. 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 ; Chuong 8 : Cau truc DK va Vong lap 5
  6. LEÄNHLEÄNH LOOPLOOP 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 Chuong 8 : Cau truc DK va Vong lap 6
  7. LOOPLOOP (tt)(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 (?) Chuong 8 : Cau truc DK va Vong lap 7
  8. 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. Chuong 8 : Cau truc DK va Vong lap 8
  9. 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. Chuong 8 : Cau truc DK va Vong lap 9
  10. 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 Chuong 8 : Cau truc DK va Vong lap 10
  11. 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 Chuong 8 : Cau truc DK va Vong lap 11
  12. 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 Maõ leänh 2 vaø 3 daøi 2 bytes hieäu quaû hôn 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 . Chuong 8 : Cau truc DK va Vong lap 12
  13. 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 Chuong 8 : Cau truc DK va Vong lap 13
  14. 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 JZ BitIs0 ñaët bit 1 vaøo ñuùng vò trí bit caàn BitIs1 : bit 13 is 1 kieåm tra vaø khaûo saùt côø ZF. (neáu bit kieåm laø 1 thì ZF seõ xoaù, BitIs0 : bit 13 is 0 ngöôïc laïi ZF ñöôïc laäp. Chuong 8 : Cau truc DK va Vong lap 14
  15. 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. Chuong 8 : Cau truc DK va Vong lap 15
  16. 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. Chuong 8 : Cau truc DK va Vong lap 16
  17. 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. Chuong 8 : Cau truc DK va Vong lap 17
  18. 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. 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? Chuong 8 : Cau truc DK va Vong lap 18
  19. LEÄNH NHAÛY COÙ ÑIEÀU KIEÄN ñ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 : MOV AH, 2 INT 21H MOV CX, 26 INC DL MOV DL, 41H DEC CX JNZ PRINT_LOOP MOV AX, 4C00H INT 21H Chuong 8 : Cau truc DK va Vong lap 19
  20. 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ôø. JZJZ NhaûyNhaûy neáuneáu keátkeát quaûquaû soso saùnhsaùnh == 00 JEJE NhaûyNhaûy neáuneáu 22 toaùntoaùn haïnghaïng baèngbaèng nhaunhau JNZJNZ NhaûyNhaûy neáuneáu keátkeát quaûquaû soso saùnhsaùnh laølaø khaùckhaùc nhau.nhau. JNEJNE NhaûyNhaûy neáuneáu 22 toaùntoaùn haïnghaïng khaùckhaùc nhau.nhau. JAJA NhaûyNhaûy neáuneáu Opt1Opt1 >> Opt2Opt2 JNBEJNBE NhaûyNhaûy neáuneáu Opt1Opt1 =>= Opt2Opt2 Chuong 8 : Cau truc DK va Vong lap 20 JNBJNB NhaûyNhaûy neáuneáu NotNot (Opt1<Opt2)(Opt1<Opt2)
  21. LEÄNH NHAÛY DÖÏA TREÂN KEÁT QUAÛ SO SAÙNH CAÙC TOAÙN HAÏNG KHOÂNG DAÁU (ctn) . JNCJNC NhaûyNhaûy neáuneáu khoângkhoâng coùcoù Carry.Carry. JBJB NhaûyNhaûy neáuneáu Opt1Opt1 =>= Opt2)Opt2) JCJC NhaûyNhaûy neáuneáu coùcoù CarryCarry JBEJBE NhaûyNhaûy neáuneáu Opt1 > Opt2)Opt2) Chuong 8 : Cau truc DK va Vong lap 21
  22. LEÄNH NHAÛY DÖÏA TREÂN KEÁT QUAÛ SO SAÙNH CAÙC TOAÙN HAÏNG COÙ DAÁU . JGJG NhaûyNhaûy neáuneáu Opt1>Opt2Opt1>Opt2 JNLEJNLE NhaûyNhaûy neáuneáu Not(Opt1Not(Opt1 =Opt2Opt1>=Opt2 JNLJNL NhaûyNhaûy neáuneáu NotNot (Opt1(Opt1 =>= Opt2)Opt2) JLEJLE NhaûyNhaûy neáuneáu Opt1Opt1 > Opt2)Opt2) Chuong 8 : Cau truc DK va Vong lap 22
  23. LEÄNH NHAÛY DÖÏA TREÂN CAÙC CÔØ . JCXZJCXZ NhaûyNhaûy neáuneáu CX=0CX=0 JSJS NhaûyNhaûy neáuneáu SF=1SF=1 JNSJNS NhaûyNhaûy neáuneáu SFSF =0=0 JOJO NhaûyNhaûy neáuneáu ñaõñaõ traøntraøn tròtrò JLJL NhaûyNhaûy neáuneáu Opt1Opt1 =>= Opt2)Opt2) JLEJLE NhaûyNhaûy neáuneáu Opt1Opt1 <=<= Opt2Opt2 JNOJNO NhaûyNhaûy neáuneáu traøntraøn tròtrò JPJP NhaûyNhaûy neáuneáu parityparity chaúnchaún JNPJNP NhaûyNhaûy neáuneáu PFPF =0=0 Chuong 8 : Cau truc DK va Vong lap 23
  24. CAÙC VÒ DUÏ MINH HOÏA LEÄNH NHAÛY COÙ ÑK Ex1 : tìm soá lôùn hôn trong 2 soá chöùa trong thanh ghi AX vaø BX . Keát quaû ñeå trong DX MOV DX, AX ; giaû söû AX laø soá lôùn hôn. CMP DX, BX ; IF AX >=BX then JAE QUIT ; nhaûy ñeán QUIT MOV DX, BX QUIT : ; ngöôïc laïi cheùp BX vaøo DX MOV AH,4CH INT 21H Chuong 8 : Cau truc DK va Vong lap 24
  25. CAÙC VÍ DUÏ MINH HOÏA LEÄNH NHAÛY COÙ ÑK Ex1 : tìm soá nhoû nhaát trong 3 soá chöùa trong thanh ghi ALø BL vaø CL . Keát quaû ñeå trong bieán SMALL MOV SMALL, AL ; giaû söû AL nhoû nhaát CMP SMALL, BL ; neáu SMALL <= BL thì JBE L1 MOV SMALL, BL Nhaûy ñeán L1 L1 : ; neáu SMALL <= CL thì CMP SMALL, CL ; Nhaûy ñeán L2 JBE L2 MOV SMALL, CL ; CL laø soá nhoû nhaát L2 : . . . Chuong 8 : Cau truc DK va Vong lap 25
  26. Caùc leänh dòch vaø quay bit SHL (Shift Left) : dòch caùc bit cuûa toaùn haïng ñích sang traùi Cuù phaùp : SHL toaùn haïng ñích ,1 Dòch 1 vò trí. Cuù phaùp : SHL toaùn haïng ñích ,CL Dòch n vò trí trong ñoù CL chöùa soá bit caàn dòch. Hoaït ñoäng : moät giaù trò 0 seõ ñöôïc ñöa vaøo vò trí beân phaûi nhaát cuûa toaùn haïng ñích, coøn bit msb cuûa noù ñöôïc ñöa vaøo côø CF Chuong 8 : Cau truc DK va Vong lap 26
  27. Caùc leänh dòch vaø quay bit Ex : DH chöùa 8Ah, CL chöùa 3. SHL DH, CL ; 01010000b ? Cho bieát keát quaû cuûa : SHL 1111b, 3 MT thöïc hieän pheùp nhaân baèng dòch traùi Chuong 8 : Cau truc DK va Vong lap 27
  28. leänh dòch phaûi SHR Coâng duïng : dòch caùc bit cuûa toaùn haïng ñích sang beân phaûi. Cuù phaùp : SHR toaùn haïng ñích , 1 SHR toaùn haïng ñích , CL ; dòch phaûi n bit trong ñoù CL chöùa n Hoaït ñoäng : 1 giaù trò 0 seõ ñöôïc ñöa vaøo bit msb cuûa toaùn haïng ñích, coøn bit beân phaûi nhaát seõ ñöôïc ñöa vaøo côø CF. MT thöïc hieän pheùp chia baèng dòch phaûi Chuong 8 : Cau truc DK va Vong lap 28
  29. leänh dòch phaûi SHR Ex : shr 0100b, 1 ; 0010b = 2 Ñoái vôùi caùc soá leû, dòch phaûi seõ chia ñoâi noù vaø laøm troøn xuoáng soá nguyeân gaàn nhaát. Ex : shr 0101b, 1 ; 0010b = 2 Chuong 8 : Cau truc DK va Vong lap 29
  30. Caùc pheùp nhaân vaø chia toång quaùt Vieäc nhaân vaø chia cho caùc soá luõy thöøa cuûa 2 coù theå thöïc hieän baèng leänh dòch traùi vaø dòch phaûi. Ñeå nhaân vaø chia cho caùc soá baát kyø ta coù theå keát hôïp leänh dòch vaø coäng. Ex : nhaân 2 soá nguyeân döông A vaø B baèng leänh coäng vaø dòch bit. Giaû söû A = 111b vaø B = 1101b. Tính A*B Chuong 8 : Cau truc DK va Vong lap 30
  31. Caùc pheùp nhaân vaø chia toång quaùt Thuaät toaùn : Tích = 0 Repeat If bit Lsb cuûa B baèng 1 Then tích = tích + A End If Dòch traùi A Dòch phaûi B Until B =0 Chuong 8 : Cau truc DK va Vong lap 31
  32. Caùc pheùp nhaân vaø chia toång quaùt -Vì bit lsb cuûa B = 1 Vì bit lsb cuûa B =1 tích = tích +A = 111b Tích = 100011b+111000b= 1011011b Dòch traùi A : 1110000b Dòch traùi A : 1110b Dòch phaûi B : 0b Dòch phaûi B : 110b Vì bit lsb cuûa B = 0 Vì bit lsb cuûa B = 0 Tích = 1011011b = 91d Dòch traùi A : 11100b Dòch phaûi B : 11b Vì bit lsb cuûa B = 1 Tích =tích + A = 100011b Dòch traùi A : 111000b Dòch phaûi B : 1b Giaû söû A = 111b vaø B = 1101b. Tính A*B Chuong 8 : Cau truc DK va Vong lap 32
  33. Chöông trình con Coù vai troø gioáng nhö chöông trình con ôû ngoân ngöõ caáp cao. ASM coù 2 daïng chöông trình con : daïng FAR vaø daïng NEAR. Leänh goïi CTC Leänh goïi CTC naèm khaùc ñoaïn boä naèm cuøng ñoaïn nhôù vôùi CTC ñöôïc boä nhôù vôùi CTC goïi ñöôïc goïi Chuong 8 : Cau truc DK va Vong lap 33
  34. BIEÅU DIEÃN CAÁU TRUÙC LOGIC MÖÙC CAO Duø Assembly khoâng coù phaùt bieåu IF, ELSE, WHILE, REPEAT, UNTIL,FOR,CASE nhöng ta vaãn coù theå toå hôïp caùc leänh cuûa Assembly ñeå hieän thöïc caáu truùc logic cuûa ngoân ngöõ caáp cao. Chuong 8 : Cau truc DK va Vong lap 34
  35. Phaùt bieåu IF seõ kieåm tra 1 ñieàu kieän vaø theo sau ñoù laø 1 soá caùc phaùt bieåu ñöôïc thöïc thi khi ñieàu kieän kieåm tra coù giaù trò true. Caáu truùc logic HIEÄN THÖÏC BAÈNG ASM IF (OP1=OP2) CMP OP1,OP2 JNE CONTINUE ENDIF CONTINUE : . Chuong 8 : Cau truc DK va Vong lap 35
  36. Phaùt bieåu IF coù keøm toaùn töû OR HIEÄN THÖÏC BAÈNG ASM Caáu truùc logic CMP A1,OP1 JG EXCUTE IF (A1>OP1) OR CMP A1,OP2 (A1>=OP2) OR JGE EXCUTE (A1=OP3) OR CMP A1,OP3 (A1 CMP A1,OP4 ENDIF JL EXCUTE JMP CONTINUE EXCUTE : CONTINUE : Chuong 8 : Cau truc DK va Vong lap 36
  37. Phaùt bieåu IF coù keøm toaùn töû AND HIEÄN THÖÏC BAÈNG ASM Caáu truùc logic CMP A1,OP1 JNG CONTINUE IF (A1>OP1) AND CMP A1,OP2 (A1>=OP2) AND JL CONTINUE (A1=OP3) AND CMP A1,OP3 (A1 JNL CONTINUE ENDIF JMP CONTINUE CONTINUE : CHUÙ YÙ : khi ñieàu kieän coù toaùn töû AND, caùch hay nhaát laø duøng nhaûy vôùi ñieàu kieän ngöôïc laïi ñeán nhaõn, boû qua phaùt bieåu trong caáu truùc Logic. Chuong 8 : Cau truc DK va Vong lap 37
  38. VOØNG LAËP WHILE HIEÄN THÖÏC BAÈNG ASM Caáu truùc logic DO_WHILE : CMP OP1, OP2 DO WHILE (OP1 ENDDO JMP DO_WHILE ENDDO : Chuong 8 : Cau truc DK va Vong lap 38
  39. VOØNG LAËP WHILE COÙ LOÀNG IF HIEÄN THÖÏC BAÈNG ASM _WHILE : Caáu truùc logic CMP OP1, OP2 JNL WHILE_EXIT DO WHILE (OP1 CMP OP2,OP3 ; phaàn If IF (OP2=OP3) THEN JNE ELSE ; khoâng thoûa If ; thoûa If ENDIF JMP ENDIF; thoûa If neân ENDDO boû qua Else ELSE : ENDIF : JMP _WHILE WHILE_EXIT : Chuong 8 : Cau truc DK va Vong lap 39
  40. VOØNG LAËP REPEAT UNTIL HIEÄN THÖÏC BAÈNG ASM Caáu truùc logic REPEAT : REPEAT TESTOP12: UNTIL (OP1=OP2) OR CMP OP1, OP2 (OP1>OP3) JE ENDREPEAT TESTOP13 : Baèng nhau thoaùt CMP OP1, OP3 REPEAT Repeat JNG ENDREPEAT : Chuong 8 : Cau truc DK va Vong lap 40
  41. HIEÄN THÖÏC BAÈNG ASM CASE : MOV AL, INPUT Caáu truùc logic CMP AL, ‘A’ CASE INPUT OF JNE TESTB CALL PROC_A ‘A’ : Proc_A JMP ENDCASE ‘B’ : Proc_B TESTB : ‘C’ : Proc_C CMP AL, ‘B’ ‘D’ : Proc_D JNE TESTC CALL PROC_B End ; JMP ENDCASE TESTC : CMP AL, ‘C’ JNE TESTD CALL PROC_C JMP ENDCASE TESTD : CMP AL, ‘D’ JNE ENDCASE CALL PROC_D ENDCASE : . Chuong 8 : Cau truc DK va Vong lap 41
  42. Raát hieäu quaû khi xöû lyù phaùt bieåu CASE laø duøng baûng OFFSET chöùa ñòa chæ cuûa nhaõn hoaëc cuûa haøm seõ nhaûy ñeán tuyø vaøo ñieàu kieän. Baûng Offset naøy ñöôïc goïi Lookup Table raát hieäu quaû khi duøng phaùt bieåu Case coù nhieàu trò löïa choïn. Chuong 8 : Cau truc DK va Vong lap 42
  43. Case_table db ‘A’ ; giaù trò tìm kieám Ñòa chæ caùc procedure Dw Proc_A giaû söû ôû ñòa chæ 0120 Db ‘B’ Dw Proc_B giaû söû ôû ñòa chæ 0130 Db ‘C’ giaû söû ôû ñòa chæ 0140 Dw Proc_C Db ‘D’ giaû söû ôû ñòa chæ 0150 Dw Proc_D ‘A’‘A’ 01200120 ‘B’‘B’ 01300130 ‘C’‘C’ 01400140 ‘D’‘D’ 01500150 Caáu truùc löu tröõ cuûa CaseTable nhö sau Chuong 8 : Cau truc DK va Vong lap 43
  44. Case : MOV AL, INPUT MOV BX, OFFSET CASE_TABLE MOV CX, 4 ; laëp 4 laàn soá entry cuûa table TEST : CMP AL, [BX] ; kieåm tra Input JNE TESTAGAIN ; khoâng thoûa kieåm tra tieáp CALL WORD PTR [BX+1] ; goïi thuû tuïc töông öùng JMP ENDCASE TESTAGAIN : ADD BX , 3 ; sang entry sau cuûa CaseTable LOOP TEST ENDCASE : Chuong 8 : Cau truc DK va Vong lap 44
  45. Chöông trình con Caáu truùc CTC : TeânCTC PROC ; caùc leänh RET TeânCTC ENDP CTC coù theå goïi 1 CTC khaùc hoaëc goïi chính noù. CTC ñöôïc goïi baèng leänh CALL . CTC gaàn (near) laø chöông trình con naèm chung segment vôùi nôi goïi noù. CTC xa (far) laø chöông trình con khoâng naèm chung segment vôùi nôi goïi noù. Chuong 8 : Cau truc DK va Vong lap 45
  46. Kyõ thuaät laäp trình Haõy toå chöùc chöông trình caùc chöông trình con ñôn giaûn hoaù caáu truùc luaän lyù cuûa CT laøm cho CT deã ñoïc, deã hieåu , deã kieåm tra sai soùt Ñaàu CTC haõy caát trò thanh ghi vaøo Stack baèng leänh PUSH ñeå löu traïng thaùi hieän haønh. Sau khi hoaøn taát coâng vieäc cuûa CTC neân phuïc hoài laïi trò caùc thanh ghi luùc tröôùc ñaõ Push baèng leänh POP . Nhôù trình töï laø ngöôïc nhau ñeå trò cuûa thanh ghi naøo traû cho thanh ghi naáy. Ñöøng toái öu quaù CT vì coù theå laøm cho CT keùm thoâng minh, khoù ñoïc. Chuong 8 : Cau truc DK va Vong lap 46
  47. Kyõ thuaät laäp trình (tt) Coá gaéng toå chöùc chöông trình cho toát phaûi thieát keá ñöôïc caùc böôùc chöông trình seõ phaûi thöïc hieän. Kinh nghieäm : khi vaán ñeà caøng lôùn thì caøng phaûi toå chöùc logic chöông trình caøng chaët cheõ. Baèng söï toå hôïp cuûa leänh nhaûy ta hoaøn toaøn coù theå moâ phoûng caáu truùc ñieàu khieån vaø voøng laëp. Chuong 8 : Cau truc DK va Vong lap 47
  48. SUMMARY ü Coù theå moâ phoûng caáu truùc logic nhö ngoân ngöõ caáp cao trong Assembly baèng leänh JMP vaø LOOP. ü caùc leänh nhaûy : coù ñieàu kieän vaø voâ ñieàu kieän. ü Khi gaëp leänh nhaûy, CPU seõ quyeát ñònh nhaûy hay khoâng baèng caùch döïa vaøo giaù trò thanh ghi côø. ü caùc leänh luaän lyù duøng ñeå laøm ñieàu kieän nhaûy laø AND, OR, XOR, CMP . . . üBaát cöù khi naøo coù theå, haõy toå chöùc chöông trình thaønh caùc chöông trình con ñôn giaûn ñöôïc caáu truùc luaän lyù cuûa chöông trình. Chuong 8 : Cau truc DK va Vong lap 48
  49. 1. Giaû söû DI = 2000H, [DS:2000] = 0200H. Cho bieát ñòa chæ oâ nhôù toaùn haïng nguoàn vaø keát quaû löu trong toaùn haïng ñích khi thöïc hieän leänh MOV DI, [DI] 2. Giaû söû SI = 1500H, DI=2000H, [DS:2000]=0150H . Cho bieát ñòa chæ oâ nhôù toaùn haïng nguoàn vaø keát quaû löu trong toaùn haïng ñích sau khi thöïc hieän leänh ADD AX, [DI] 3. Coù khai baùo A DB 1,2,3 Cho bieát trò cuûa toaùn haïng ñích sau khi thi haønh leänh MOV AH, BYTE PTR A. 4. Coù khai baùo B DB 4,5,6 Cho bieát trò cuûa toaùn haïng ñích sau khi thi haønh leänh MOV AX, WORD PTR B. Chuong 8 : Cau truc DK va Vong lap 49
  50. Baøi 1 : Coù vuøng nhôù VAR1 daøi 200 bytes trong ñoaïn ñöôïc chæ bôûi DS. Vieát chöông trình ñeám soá chöõ ‘S’ trong vuøng nhôù naøy. Baøi 2 : Coù vuøng nhôù VAR2 daøi 1000 bytes. Vieát chöông trình chuyeån ñoåi caùc chöõ thöôøng trong vuøng nhôù naøy thaønh caùc kyù töï hoa, caùc kyù töï coøn laïi khoâng ñoåi. Baøi 3 : Vieát chöông trình nhaäp 2 soá nhoû hôn 10. In ra toång cuûa 2 soá ñoù. Chuong 8 : Cau truc DK va Vong lap 50
  51. Baøi 4 : Vieát chöông trình nhaäp 2 soá baát kyø. In ra toång vaø tích cuûa 2 soá ñoù. Chöông trình coù daïng sau : Nhaäp soá 1 : 12 Nhaäp soá 2 : 28 Toång laø : 40 Tích laø : 336 Baøi 5 : Vieát chöông trình nhaäp 1 kyù töï. Hieån thò 5 kyù töï keá tieáp trong boä maõ ASCII. Ex : nhaäp kyù töï : a 5 kyù töï keá tieáp : b c d e f Chuong 8 : Cau truc DK va Vong lap 51
  52. Baøi 6 : Vieát chöông trình nhaäp 1 kyù töï. Hieån thò 5 kyù töï ñöùng tröôùc trong boä maõ ASCII. Ex : nhaäp kyù töï : f 5 kyù töï keá tieáp : a b c d e Baøi 7 : Vieát chöông trình nhaäp 1 chuoåi kyù töï. In chuoåi ñaõ nhaäp theo thöù töï ngöôïc. Ex : nhaäp kyù töï : abcdef 5 kyù töï keá tieáp : fedcba Chuong 8 : Cau truc DK va Vong lap 52