Trang : 1 CHÖÔNG 3 BOÄ VI XÖÛ LYÙ INTEL 8088 Sau khi ñaõ tìm hieåu qua veà caáu truùc cuûa heä vi xöû lyù. Trong chöông naøy ta seõ ñi saâu tìm hieåu moït boävi xöû lyù cuï theå vaø raát ñieån hình: boä vi xöû lyù cuûa Intel. Tröôùc heát caàn noùi roû lyù do taïi sao ôû ñaâyta laïi choïn ñích danh boä vi zöû laùy 8088 ñeå tìm hieåu maø khoâng phaûi laø boä vi xöû lyù naøo khaùc ( ñieàu maø nhieàu ngöôøi khaùc phaûi laøm ). Thöù nhaát, ñaây laø boä vi xöû lyù noåi tieáng moät thôøi thuoäc hoï 80x86 cuûa Intel, noù ñöôïc söû duïng trong nhieàu lónh vöïc khaùc nhau, nhaát laø trong caùc maùy IBM PC /XT. Caùc boä vi xöû lyù thuoäc hoï naøy seõ coøn ñöôïc suû duïng roäng raõi trong haøng chuïc naêm nöõa, vaø vi tính keá thöøa cuûa caùc saûn phaåm trong hoï 80x86., caùc chöông trình vieát cho8088 vaãn coù theå chaïy treân caùc heä thoáng tieân tieán sau naøy. Thöù hai, veà goùc ñoä sö phaïm thì ñaây laø boä vi xöû lyù khaù ñôn giaûn vaø vì vieäc daïy hieåu noù laø töông ñoái deå ñoái vôùi nhöõng ngöôøi môùi baét ñaàu thaâm nhaäp vaøo lónh vöïc naøy. Thöù ba, caùc hoïvi xöû lyù tuy coù khaùc nhau nhöng xeùt cho cuøng cuõng coù khaù nhieàu ñieåm chuû yeáu raát gioáng nhau. Do ñoù moät khi ñaõ naém ñöôïc caùc vaán ñeà kyû thuaät cuûa8088, ta seõ coù cô sôû ñeå naém baét caùc kyû thuaät cuûa caùc boä vi xöû lyù khaùc cuøng trong hoï Intel 80x86 hoaëc cuûa caùc hoï khaùc. 1. Giôù hoaït ñoäng ng cuû Giôùi thieä thieäu caá caáu truù truùc beâ beân trong vaø vaøhoaï hoa cuûa boä boä vi xöû lyù lyù 8088. Tröôùc khi giôùi thieäu taäp leänh vaø caùch thöùc laäp trình cho boävi xöû lyù8088 hoaït ñoäng ta caàn phaûi tìm hieåu kyõ caáu truùc beân trong cuûa noù. Treân hình 3.1 laø sô ñoà khoái caáu truùc beân trong caûu boä vi xöû lyù Intel 8088: 1.1.BIU Vaø Vaø EU theo sô ñoà khoái treân hình 3.1 ta thaáy beân trong CPU 8088 coù 2 khoái chính: khoái phoái gheùp ( bus interface unit, BIU ) vaøkhoái thöïc hieän leänh ( execution unit, EU ). Vieäc chia CPU ra thaønh 2 phaàn laøm vieäc ñoàng thôøi coù lieân heä vôùi nhau qua ñeäm leänh laøm taêng ñaùng keå toác ñoä xöû lyù cuûa CPU. Caùc bus beân trong CPU coù nhieäm vuï chuyeån taûi tín hieäu cuûa caùc khoái khaùc. Trong soá caùc bus ñoù coù bus döõ lieäu 16 bit cuûa ALU, bus caùc tín hieäu ñieàu khieån ôû EU vaø bus trong cuûa heä thoáng ôû BIU. Tröôùc khi ñi ra bus ngoaøi hoaëc ñivaøo bus trong cuûa boä vi xöû l, caùc tín hieäu truyeàn treân bus thöôøng ñöôïc cho ñi qua caùc boä ñeäm ñeå naâng cao tính töông thích cho noái gheùp hoaëc naâng cao phoái gheùp. BIU ñöa ra ñòa chæ, ñoïc maõ leänh töø boä nhôù, ñoïc / ghi döõ lieäu töø vaøo coång hoaëc boä nhôù. Noùi caùch khaùc BIU chòu traùch nhieäm ñöa ñòa chæ ra bus vaø trao ñoåi döõ lieäu vôùi bus. Trong EU ta thaáy coù moät khoái ñieàu khieån ( control unit, CU ). Chính taïi beân trong khoái ñieàu khieån naøy coù maïch giaûi maõ leänh. Maõ leänh ñoïc vaøo töø boä nhôù ñöôïc ñöa ñeán ñaàu vaøo cuûa boä giaûi maõ, caùc thoâng tin thu ñöôïc töø ñaàu ra cuûa noù seõ ñöôïc ñöa ñeán maïch taïo xung ñieàu khieån, keát quaû laø tu thu ñöôïc caùc daõy xung khaùc nhau ( tuyø theo maõ leänh ) ñeå ñieàu khieån hoaït ñoäng cuûa caùc boä phaän beân trong vaø beân ngoaøi CPU. Trong khoái EU coøn coù khoái soá hoïc vaø loâgic ( arithmetic anh logic unit. ALU ) duøng ñeå thöïc hieän caùc thao taùc khaùc nhau vôùi caùc toaùn haïng cuûa leänh.
Trang : 2 Toùm laïi, khi CPU hoaït ñoäng EU seõ cung caáp thoâng tin veà ñòa chæ cho BIU ñeå khoái naøy ñoïc leänh vaø döõ lieäu, coøn baûn thaân noù thì ñoïc leänh vaø giaûi maõ leänh. Trong BIU coøn coù moät boä nhôù ñeäm leänh vôùi dung löôïng 4 byte duøng ñeå chöùa caùc maõ leänh ñoïc ñöôïc naèm saün ñeå chôø EU xöû lyù ( trong taøi lieäu cuûa Intel boä ñeäm leänh naøy coøn ñöôïc goïi laø haøng ñôïi leänh ). Ñaây laø moät caáu truùc môùi ñöôïc caáy vaøo boä vi xöû lyù 8086x88 do vieäc Intel ñöa cô cheá xöû lyù xen keû lieân tuïc, doøng maõ leänh ( instruction pipelining ) vaøo öùng duïng trong caùc boä vi xöû lyù theá heä môùi. Pipeline laø moät cô cheá ñaõ ñöôïc öùng duïng töø nhöõng naêm 60 töø caùc maùy lôùn. Nhaân ñaây ta seõ giôùi thieäu sô qua moät chuùt veà cô cheá naøy. Trong caùc boä vi xöû lyù ôû caùc theá heä tröôùc ( nhö ôû 8085 chaúng haïn ), thoâng thöôøng hoaït ñoäng cuûa CPU goàm 3 giai ñoaïn: ñoïc maõ leänh ( oâpcde fetch ), giaûi maõ leänh ( ñecode ) vaø thöïc hieän leänh ( execution ). Trong moät thôøi ñieåm nhaát ñònh, CPU theá heä naøy chæ coù theå thöïc hieän moät trong ba coâng vieäc noùi treân vaø vì vaäy tuyø theo töøng giai ñoaïn seõ coù nhöõng boä phaän nhaát ñònh cuûa CPU ôû traïng thaùi nhaøn roãi. Chaúng haïn, khi CPU giaûi maõ leänh hoaëc khi noù ñang thöïc hieän nhöõng leänh khoâng lieân quan ñeán bus ( thao taùc noäi boä ) thì caùc bus khoâng ñöôïc duøng vaøo vieäc gì daãn ñeán tình traïng laõng phí khaû naêng cuûa chuùng ( hình 3.2 ). Trong khi ñoù töø boä vi xöû lyù 8086/88, Intel söû duïng cô cheá xöû lyù xen keû lieân tuïc doøng maõ leänh thì CPU ñöôïc chia thaønh 2 khoái vaø coù söï phaân chia coâng vieäc cho töøng khoái: vieäc ñoïc maõ leänh laø do khoái BIU thöïc hieän, vieäc giaûi maõ leänh vaø thöïc hieän leänh laø do khoái EU ñaûm nhieäm. Caùc khoái chöùc naêng naøy coù khaû naêng laøm vieäc ñoàng thôøi vaø caùc bus seõ lieân tuïc söû duïng: trong khi EU laáy maõ leänh töø boä ñeäm 4 byte ñeå giaûi maõ hoaëc thöïc hieän caùc thao taùc noäi boä thì BIU vaãn coù theå ñoïc maõ leänh töø boä nhôù chính roài ñaët chuùng vaøo boä nhôù ñeäm leänh ñaõ noùi. Boä ñeäm leänh naøy laøm vieäc theo kieåu “ vaøo tröôùc – ra tröôùc “ (first in-first out, FIFO ), nghóa laø byte naøo ñöôïc caát vaøo ñeäm tröôùc seõ ñöôïc laáy ra xöû lyù tröôùc. Neáu coù söï vaøo/ra lieân tuïc cuûa doøng maõ leänh trong boä ñeäm naøy thì coù nghóa laø coù söï phoái hôïp hoaït ñoäng hieäu quaû giöõa hai khoái EU vaø BIU theo cô cheá xöû lyù xen keû lieân tuïc doøng maõ leänh ñeå laøm taêng toác ñoä xöû lyù toång theå. Kyõ thuaät xöû lyù xen keû lieân tuïc doøng maõ leänh seõ khoâng coøn taùc duïng taêng toác ñoä xöû lyù chung cuûa CPU nöõa neáu nhö trong ñeäm leänh coù chöùa caùc maõ leänh cuûa caùc leänh CALL ( goïi chöông trình con ) hoaêc JMP ( nhaûy ), bôûi vì luùc caùc leänh naøy noäi dung cuûa boä ñeäm seõ bò xoaù vaø thay theá vaøo ñoù laø noäi dung môùi ñöôïc naïp bôûi caùc maõ leänh môùi do leänh nhaûy hoaëc goïi quyeát ñònh. Vieäc naøy tieâu toán nhieàu thôøi gian hôn so vôùi tröôøng hôïp trong ñeäm chæ coù maõ leänh cuûa caùc leänh tuaàn töï
Khoâng coù pipelining Coù pipelining
F1 D 1 E1 F2 D 2 E2 F3 D 3 E3
F1 D 1 E1 F1 D 1 E1 F1 D 1 E1 (F : Ñoï c leänh , D :G iaû i ma û leän h, E : Thöï c hieän leän h)
H ình 3.2 : D oøn g leä nh thöôøng va ø doøn g leä nh xen keõ lieân tuïc
Trang : 3
Trong boä vi xöû lyù 8088 ta coøn thaéy coù caùc thanh ghi 16 bit naèm trong caû hai khoái BIU vaø EU, ngoaøi ra cuõng coù moät soá thanh ghi 8 hoaëc 16 bit taïi EU. Ta seõ laàn löôït giôùi thieäu caùc thanh ghi noùi treân cuøng chöùc naêng chính cuûa chuùng. *caù *caùc thanh ghi ñoaï oaïn Khoái BIU ñöa ra treân bus ñòa chæ 20 bit ñòa chæ, nhö vaäy 8088 coù khaû naêng phaân bieät ra ñöôïc 220 = 1.048.576 = 1M oâ nhôù hay 1Mbyte, vì caùc boä nhôù noùi chung toå chöùc theo byte. Noùi caùch khaùc: khoâng gian ñòa chæ cuûa 8088 laø 1Mbyte. Trong khoâng gian 1Mbyte boä nhôù caàn ñöôïc chia thaønh caùc vuøng khaùc nhau ( ñieàu naøy raát coù lôïi khi laøm vieäc ôû cheá ñoä nhieàu ngöôøi söû duïng hoaëc ña nhieäm ) daønh rieâng ñeå: Chöùa maõ chöông trình. Chöùa döõ lieäu vaø keát quaû khoâng gian cuûa chöông trình. Taïo ra moät vuøng nhôù ñaëc bieät goïi laø ngaên xeáp ( stack ) duøng vaøo vieäc quaûn lyù caùc thoâng soá cuûa boä vi xöû lyù khi goïi chöông trình con hoaëc trôû veà töø chöông trình con. Trong thöïc teá boä vi xöû lyù 8088 coù caùc thanh ghi 16 bit lieân quan ñeán ñòa chæ ñaàu cuûa caùc vuøng ( caùc ñoaïn ) keå treân vaø chuùng ñöôïc goïi laø caùc thanh ghi ñoaïn ( Segment Registers ). Ñoù laø thanh ghi ñoaïn maõ CS ( Code-Segment ), thanh ghi ñoaïn döõ lieäu DS ( Data sement ). Thanh ghi ñoaïn ngaên xeáp SS ( Stack segment ) vaø thanh ghi ñoaïn döõ lieäu phuï ES ( Extra segment ). Caùc thanh ghi ñoaïn 16 bit naøy chæ ra ñòa chæ ñaàu cuûa boán ñoaïn trong boä nhôù, dung löôïng lôùn nhaát cuûa moãi ñoaïn nhôù naøy laø 64 Kbyte vaø taïi moät thôøi ñieåm nhaát ñònh boä vi xöû lyù chæ laøm vieäc ñöôïc vôùi boán ñoaïn nhôù 64 Kbyte naøy. Vieäc thay ñoåi giaù trò cuûa caùc thanh ghi ñoaïn laøm cho caùc ñoaïn coù theå dòch chuyeån linh hoaït trong phaïm vi khoâng gian 1 Mbyte, vì vaäy caùc ñoaïn naøy coù theå naèm caùch nhau khi thoâng tin caàn löu trong chuùng ñoøi hoûi dung löôïng ñuû 64 Kbyte hoaëc cuõng coù theå naèm truøm nhau do coù nhöõng ñoaïn khoâng caàn duøng heát ñoaïn daøi 64 Kbyte vaø vì vaäy nhöõng ñoaïn khaùc coù theå baét ñaàu noái tieáp ngay sau ñoù. Ñieàu naøy cuõng cho pheùp ta truy nhaäp vaøo baát kyø ñoaïn nhôù ( 64 Kbyte ) naøo naèm trong toaøn boä khoâng gian 1 Kbyte. Noäi dung caùc thanh ghi ñoaïn seõ xaùc ñònh ñòa chæ cuûa oâ nhôù naèm ôû ñaàu ñoaïn. Ñòa chæ naøy coøn goïi laø ñòa chæ cô sôû. Ñòa chæ cuûa caùc oâ nhôù khaùc naèm trong ñoaïn tính ñöôïc baèng caùch coäng theâm vaøo ñòa chæ cô sôû moät giaù trò goïi laø ñòa chæ leäch hay ñoä leäch ( Offset ), goïi nhö theá vì noù öùng vôùi khoaûng leäch cuûa toaï ñoä moät oâ nhôù cuï theå naøo ñoù so vôùi oâ ñaàu ñoaïn. Ñoä leäch naøy ñöôïc xaùc ñònh bôûi caùc thanh ghi 16 bit khaùc ñoùng vai troø thanh ghi leäch ( Offset register ) maø ta seõ noùi ñeán sau. Cuï theå, ñeå xaùc ñònh ñòa chæ vaät lyù 20 bit cuûa moät oâ nhôù naøo ñoù trong moät ñoaïn baát kyø. CPU 8088 phaûi duøng ñeán 2 thanh ghi 16 bit ( moät thanh ghi ñeå chöùa ñòa chæ cô sôû, coøn thanh kia chöùa ñoä leäch ) vaø töø noäi dung cuûa caëp thanh ghi ñoù taïo ra ñòa chæ vaät lyù theo coâng thöùc sau:
Trang : 4 Ñòach tlyù=Thanhghiñ =Thanhghiñoanx16+Thanhghileä ch Ñòachæ achævaä vaätlyù tly =Thanhghi oanx16+Thanhghileäch Vieäc duøng 2 thanh ghi ñeå ghi nhôù thoâng tin veà ñòa chæ thöïc chaát ñeå taïo ra moät loaïi ñòa chæ goïi laø ñòa chæ logic vaø ñöôïc kyù hieäu nhö sau: Thanhghiñ n: Thanhghileä ch hay segment: offset Thanhghiñoaï oaïn: Thanhghileäch Ñòa chæ kieåu segment: offset laø logic vì noù toàn taïi döôùi daïng giaù trò cuûa caùc thanh ghi cuï theå beân troâng CPU vaø ghi caàn thieát truy caäp oâ nhôù naøo ñoù thì noù phaûi ñöôïc ñoåi ra ñòa chæ vaät lyù ñeå roài ñöôïc ñöa leân bus ñòa chæ. Vieäc chuyeån ñoåi naøy do moät boä taïo ñòa chæ thöïc hieän (phaàn töû ∑ treân hình 3.1). Ví duï duï: caëp CS:IP seõ chæ ra ñòa chæ cuûa leänh saép thöïc hieän trong ñoaïn maõ. Taïi moät thôøi ñieåm naøo ñoù ta coù CS = F00H vaø IP = FFFOH thì CS:IP~FOOOHx16 + FFFOH = FOOOOH + FFFOH = FFFFOH Ñòa chæ FFFFOH chính laø ñòa chæ khôûi ñoäng cuûa 8088 daáu ~ ôû ñaây laø ñeå chæ söï töông öùng. Ñòa chæ caùc oâ nhôù thuoäc caùc ñoaïn khaùc cuõng coù theå tính ñöôïc theo caùch töông töï nhö vaäy. Töø nay khi caàn noùi ñeán ñeán ñòa chæ cuûa moät oâ nhôù ta coù theå söû duïng caû ñòa chæ logic laãn ñòa chæ vaät lyù vì bao giôø cuõng toàn taïi söï töông öùng giöõa hai loaïi ñòa chæ naøy ( thoâng qua boä taïo ñòa chæ ∑ ). Tröôùc khi noùi ñeán caùc thanh ghi khaùc ta noùi theâm chuùt ít veà tính ña trò cuûa caùc thanh ghi ñoaïn vaø thanh ghi leäch trong ñòa chæ logic öùng vôùi moät ñòa chæ vaät lyù. Ñieàu naøy cuõng noùi leân tính linh hoaït cuûa cô cheá segment offset trong vieäc ñònh ñòa chæ cuûa 8086/ 88. Nhìn vaøo giaù trò cuoái cuøng cuûa ñòa chæ vaät lyù ta thaáy coù theå taïo ra ñòa chæ ñoù töø nhieàu giaù trò khaùc nhau cuûa thanh ghi ñoaïn vaø thanh ghi leäch Ví duï duï: Ñòa chæ vaät lyù 12345H coù theå ñöôïc taïo ra töø caùc giaù trò: Thanh ghi ñoaïn Thanh ghi leäch 1000H 2345H 1200H 0345H 1004H 2305H 0300H E345H … … *Caù ng *Caùc thanh ghi ña naê naêng trong khoái EU coù boán thanh ghi ña naêng 16 bit AX, BX, CX, DX. Ñieàu ñaëc bieät laø khi caàn chöùa caùc döõ lieäu 8 bit thì moãi thanh ghi coù theå taùch ra thaønh hai thanh ghi 8 bit cao vaø thaáp ñeå laøm vieäc ñoäc laäp, ñoù laø caùc taäp thanh ghi AH vaø AL, BH vaø BL, CH vaø CL, DH vaø DL ( trong ñoù H chæ phaàn cao, L chæ phaàn thaáp ). Moãi thanh ghi coù theå duøng moät caùch vaïn naêng ñeå chöùa caùc taäp döõ lieäu khaùc nhau nhöng cuõng coù coâng vieäc ñaëc bieät nhaát ñònh chæ thao taùc vôùi moät vaøi thanh ghi naøo ñoù vaø chính vì vaäy caùc thanh ghi thöôøng ñöôïc gan cho nhöõng caùi teân ñaëc bieät raát coù yù nghóa. Cuï theå: • AX ( accumulator, acc ): thanh chöùa. Caùc keát quûa cuûa caùc thao taùc thöôøng ñöôïc chöùa ôû ñaây ( keát quaû cuûa pheùp nhaân, chia ). Neáu keát quaû laø 8 bit thì thanh ghi AL ñöôïc coi laø acc. • BX ( base ): thanh ghi cô sôû thöôøng chöùa ñòa chæ cô sôû cuûa moät baûng duøng trong leänh XLAT.
Trang : 5 • CX ( count ): boä ñeám. CX thöôøng ñöôïc duøng ñeå chöùa soá laàn laëp trong tröôøng hôïp caùc leänh LOOP ( laëp ), coøn CL thöôøng cho ta soá laàn dòch hoaëc quay trong caùc leänh dòch hoaëc quay thanh ghi. • DX ( data ): thanh ghi döõ lieäu DX cuøng BX tham gia caùc thao taùc cuûa pheùp nhaân hoaëc chia caùc soá 16 bit. DX thöôøng duøng ñeå chöùa ñòa chæ cuûa caùc coång trong caùc leänh vaøo/ ra döõ lieäu tröïc tieáp. *Caù *Caùc thanh ghi con troû troû vaø vaø chæ chæ soá soá Trong 8088 coøn coù ba thanh ghi con troû vaø hai thanh ghi chæ soá 16 bit. Caùc thanh ghi naøy ( tröø IP ) ñeàu coù theå ñöôïc duøng nhö caùc thanh ghi ña naêng, nhöng öùng duïng chính cuûa moãi thanh ghi laø chuùng ñöôïc ngaàm ñònh nhö laø thanh ghi leäch cho caùc ñoaïn töông öùng. Cuï Cuï theå theå: • IP: con troû leänh ( Instruction pointer ). IP luoân troû vaøo leänh tieáp theo seõ ñöôïc thöïc hieän naèm trong ñoaïn maõ CS. Ñòa chæ ñaày ñuû cuûa leänh tieáp theo naøy öùng vôùi CS:IP vaø ñöôïc xaùc ñònh theo caùch ñaõ noùi ôû treân. • BP: con troû cô sôû ( base pointer ). BP luoân troû vaøo moät döõ lieäu naèm trong ñoaïn ngaên xeáp SS. Ñòa chæ ñaày ñuû cuûa moät phaàn töû trong ñoaïn ngaên xeáp öùng vôùi SS:BP vaø ñöôïc xaùc ñònh theo caùch ñaõ noùi ôû treân. • SP: con troû ngaên xeáp ( stack pointer ). SP luoân troû vaøo ñænh hieän thôøi cuûa ngaên xeáp naèm trong ñoaïn ngaên xeáp SS. Ñòa chæ ñænh ngaên xeáp öùng vôùi SS:SP vaø ñöôïc xaùc ñònh theo caùch ñaõ noùi ôû treân. • SI: chæ soá goác hay nguoàn ( source index ). SI chæ vaøo döõ lieäu trong ñoaïn döõ lieäu DS maø ñòa chæ cuï theå ñaày ñuû öùng vôùi DS:SI vaø ñöôïc xaùc ñònh theo caùch ñaõ noùi ôû treân. • DI: chæ soá ñích ( destination index ). DI chæ vaøo döõ lieäu trong ñoaïn döõ lieäu DS maø ñòa chæ cuï theå ñaày ñuû öùng vôùi DS:DI vaø ñöôïc xaùc ñònh theo caùch ñaõ noùi ôû treân. Rieâng trong caùc leänh thoa taùc vôùi döõ lieäu kieåu chuoåi thì caëp ES:DI luoân öùng vôùi ñòa chæ cuûa phaàn töû thuoäc chuoãi ñích coøn caëp DS:SI öùng vôùi ñòa chæ cuûa phaàn töû thuoäc chuoãi goác. *Thanh ghi côø FR ( flag register ) Ñaây laø thanh ghi khaù ñaëc bieät trong CPU, moãi bit cuûa noù ñöôïc duøng ñeå phaûn aùnh moät traïng thaùi nhaát ñònh cuûa keát quaû pheùp toaùn do ALU thöïc hieän hoaëc moät traïng thaùi hoaït ñoäng cuûa EU. Döïa vaøo caùc côø naøy ngöôøi laäp trình coù theå coù caùc leänh thích hôïp tieáp theo cho boä vi xöû lyù ( caùc leänh nhaûy coù ñieàu kieän ). Thanh ghi côø goàm 16 bit nhöng ngöôøi ta chæ duøng heát 9 bit cuûa noù ñeå laøm caùc bit côø ( hình 3.3 ). Caùc côø cuûa boä vi xöû lyù 8086 x
x
x
x
O
D
I
T
S
Z
x
A
x
P
X : Khoâng ñöôïc ñònh nghóa Hình 3.3 Sô ñoà thanh ghi côø cuûa boä vi xöû lyù 8086/88
Caù Caùc côø cuï cuï theå theå
x
C
Trang : 6 • C hoaëc CF ( carry flag ): côø nhôù. CF = 1 khi coù nhôù hoaëc muôïn töø MSSP.
• P hoaëc PF ( parity flag ): côø parity. PF phaûn aùnh tính chaün leû ( parity ) cuûa toång soá bit 1 coù trong keát quaû. Côø PF =1 khi toång soá bit trong keát quaû laø chaün ( even parity, parity chaün ). Ôûñaây ta taïm duøng parity daïng nguyeân goác ñeå traùnh söï luûng cuûng khi phaûi dòch cuïm töø “ even parity “ thaønh tính chaün leû chaün hoaëc “ odd party “ thaønh tính chaün leû leû. • A hoaëc AF ( auxilialyry carry flag ): côø nhôù phuï raát coù yù nghóa khi ta laøm vieäc vôùi caùc soá BCD.AF = 1 khi coù nhôù hoaëc muôïn töø moät soá BCD thaáp ( 4 bit thaáp ) sang moät soá BCD cao ( 4 bit cao ). • Z hoaëc ZF ( zero flag ): côø roãng. ZF =1 khi keát quaû = 0. • S hoaëc SF ( sign flag ): côø daáu. SF = 1 khi keát quaû aâm. • O hoaëc OF ( over flow flag ): coø traøn. OF = 1 khi keát quaû laø moät soá buø 2 vöôït qua ngoaøi giôùi haïn bieåu dieãn daønh cho noù. Treân ñaây laø 6 bit côø traïng thaùi phaûn aùnh caùc traïng thaùi khaùc nhau cuûa keát sau moät thao taùc naøo ñoù, trong ñoù 5 bit côø ñaàu thuoäc byte thaáp cuûa thanh côø laø caùc côø gioáng nhö cuûa boä vi xöû lyù 8 bit 8085 cuûa Intel. Chuùng ñöôïc laëp hoaëc xoaù tuyø theo caùc ñieàu kieän cuï theå sau caùc thao taùc cuûa ALU. Ngoaøi ra, boä vi xöû lyù 8088 coøn coù caùc côø ñieàu khieån sau ñaây ( caùc côø naøy ñöôïc laäp hoaëc xoaù baèng caùc leänh rieâng ): • T hoaëc TF ( trap flag ): côø baåy. TF = 1 thì CPU laøm vieäc ôû cheá ñoä chaïy töøng leänh ( cheá ñoä naøy duøng khi caàn tìm loãi trong moät chöông trình ). • I hoaëc IF ( interrupt enable flag ): côø cho pheùp ngaét. IF = 1 thì CPU cho pheùp caùc yeâu caàu ngaét ( che ñöôïc ) ñöôïc taùc ñoäng. • D hoaëc DF ( direction flag ): côø höôùng. DF = 1 khi CPU laøm vieäc vôùi chuoåi kyù töï theo thöù töï töø phaûi sang traùi ( vì vaäy D chính laø côø luøi ) YÙ nghóa cuûa caùc côø ñaõ khaù roõ raøng. Rieâng côø traøn caàn phaûi laøm roõ hôn ñeå ta hieåu ñöôïc baûn chaát vaø cô cheá laøm vieäc cuûa noù. Côø traøn thöôøng ñöôïc duøng ñeán khi ta laøm vieäc vôùi soá buø 2 coù daáu. Ñeå cho vieäc giaûi thích ñöôïc ñôn giaûn, ñaàu tieân giaû thieát ta laøm vieäc vôùi soá buø 2 daøi 8 bit, keát quaû ñeå ôû AL ( xem hình 3.4 ). Goïi C67 laø côø nhôù töø bit 6 ( B6 ) leân bit 7 ( B7 ), trong ñoù B7 laø MSB vaø cuõng chính laø bit daáu ( SF ) cuûa AL. Ta coù theå chöùng minh ñöôïc raèng quan heä giöõa côø OF vôùi caùc côø CF vaø C67 tuaân theo phöông trình sau: OF = CF ⊕ C67. Nghóa laø khi thöïc hieän caùc pheùp toaùn vôùi soá buø 2 coù daáu, hieän töôïng traøn seõ xaûy ra ( côø OF = 1 ) neáu coù nhôù töø MSB ( taát laø SF ) sang CF nhöng laïi khoâng coù nhôù vaøo chính noù ( SF ) hoaëc ngöôïc laïi. Ñieàu naøy coù theå toång quaùt hoaù cho caùc tröôøng hôïp laøm vieäc vôùi soá buø 2 coù daáu vôùi ñoä daøi 16/32 bit.
CF
b7 b6
C67
AL
Hình 3.4 Sô ñoà thanh ghi AL vaø caùc côø CF , C 67
bo
Trang : 7
1.2 8086 vaø vaø 8088
AD14 AD13 AD12 AD11 AD10 AD00 AD91 AD81
GND 1 A14 2 A13 3 A12 4 A11 5 A10 6 A9 7 A8 8 AD7 9 AD6 10 AD5 11 AD4 12 AD3 13 AD2 14 AD1 15 AD0 16 NMI 17 INRT 18 CLK 19 GND 20
P 8088 [8086]
40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
Cheá ñoä MIN VI6 AI5 AI6/S3 AI7/S4 AI8/S5 AI9/S6 SS0 MN/MN RD HOLD WR IO/M DT7R DEN ARE ININ IIST READY RESET
Cheá ñoä MAX
BIH (RQ/GT0) (RQ/GH) (LOCK) (S2) (S1) (S0) (QS0) (QS1)
Hình 35 . Sô ñoà chaân cuûa CPU 8088[8086] Tröôùc khi keát thuùc phaàn moâ taû caáu truùc cuûa boä vi xöû lyù ñeå ñi vaøo giôùi thieâu taäp leänh cuûa 8088 ta noùi qua moät chuùt veà söï gioáng nhau vaøkhaùc nhau giöõa 8088 vaø 8086 laø boä vi xöû lyù 16 bit hoaøn chænh, coøn 8088 laø boä vi xöû lyù vôùi 16 bit döõ lieäu beân trong ( gioáng nhö 8086 ), nhöng khi ra ngoaøi bus döõ lieäu cuûa noù chæ coøn 8 bit. Caáu truùc beân trong cuûa 8088 vaø 8086 gioáng nhau veà cô baûn, ngoaøi tröø hai ñieåm. Ñieåm khaùc nhau ñaàu tieân laø ôû ñoä daøi boä nhôù ñeäm leänh ( haøng ñôïi leänh ) ñoä daøi naøy ôû 8088 laø 4 byte coøn ôû 8086 laø 6 byte; ñieàu naøy seõ coù aûnh höôûng ít nhieàu ñeán söï khaùc bieät veà söï toác ñoä xöû lyù cuûa hai boä CPU. Ñieåm khaùc nhau thöù hai laø ôû kích thöôùc cuûa bus döõ lieäu: ôû 8088 laø 8 bit coøn ôû 8086 laø 16 bit ( trong khi ALU vaø caùc thanh ghi cuûa hai boä CPU vaãn coù ñoä daøi nhö nhau. Ñieàu naøy coù aûnh höôûng nhieàu ñeán coâng naêng ( Perfomance ) vaø giaù thaønh cuûa heä thoáng xaây döïng treân cô sôû caùc boä vi xöû lyù naøy. Ñoái vôùi 8086 do bus döõ lieäu laø 16 bit noù coù theå ñoïc/ghi ñöôïc moät töø naèm ôû hai oâ nhôù thaúng haøng ( moät töø trong boä nhôù ñöôïc coi laø xeáp
Trang : 8 thaúng haøng khi ôû ñòa chæ chaün laøbyte thaáp, ôû ñòa chæ leû laø byte cao ) trong moät chu kyø ñoïc/ghi: coøn ôû 8088 do bus döõ lieäu chæ coù 8 bit neân ñoïc/ghi moät töø naèm ôû hai oâ nhôù thaúng haøng ( naèm lieân tieáp nhö treân ) noù phaûi thöïc hieän trong hai chu kyø ñoïc/ghi. Buø laïi nhöôïc ñieåm veà toác ñoä, 8088 coù giaù reû vaøduøng ñeå taïo ra caùc heä thoáng vôùi giaù phaûi chaêng vì noù deå phoái gheùp vôùi caùc thieát bò ngoaïi vi 8 bit ñang thònh haønh luùc ñoù. Ñieàu khaùc nhau nöõa taát yeáu phaûi xaûy ra laø söï khaùc nhau trong vieäc boá trí caùc chaân ôû hai vi maïch nhö treân hình 3.5 ( xem theâm phaàn giôùi thieäu cuï theå caùc tín hieäu taïi caùc chaân ôû chöông V ). Maëc duø coù nhöõng ñieåm khaùc nhau ñaõ neâu, nhöng vì nhöõng ñieåm gioáng nhau laø raát cô baûn vaø vì hai boä vi xöû lyù coù taäp leänh gioáng nhau neân veà quan ñieåm laäp trình thì chuùng laø töông ñöông 2.Caù ch maõ nh cuû aboä vi xöû lyù 2.Caùch maõ hoaù hoaù leä leänh cuûaboä abo lyù 8088 Leänh cuûaboä vi xöû lyù ñöôïc ghi baèng caùc kyù töï döôùi daïng gôïi nhôù ( memonic ) ñeå ngöôøi söû duïng ñeå nhaän bieát. Ñoái vôùi baûn thaân boä vi xöû lyù thì leänh cho noù ñöôïc maõ hoaù döôùi daïng caùc soá 0 vaø 1 (coøn goïi laø maõ maùy ) vì ñoù laø daïng bieåu dieãn thoâng tin duy nhaát maø maùy hieåu ñöôïc. Vì leänh do boä vi xöû lyù ñöôïc cho döôùi daïng maõ neân sau khi nhaän leänh., boä vi xöû lyù phaûi thöïc hieän vieäc giaûi maõ leänh roài sau ñoù môùi thöïc hieän leânh. Vieäc hieåu roõ baûn chaát caùch ghi leänh baèng soá heä 2 cho boä vi xöû lyù seõ coù lôïi khi ta caàn dòch “ baèng tay “. Moät leänh gôïi nhôù khi laøm vieäc vôùi caùc “ kit “ vi xöû lyù ( tuy raèng vieäc naøy ít khi xaûy ra vì ta thöôøng laøm vieäc vôùi caùc heä ñöôïc trang bò chöông trình dòch hôïp ngöõ ). Moät leänh coù theå coù ñoä daøi moät vaøi byte tuyø theo boä vi xöû lyù. Giaû thieát moät boä vi xöû lyù naøo ñoù duøng 1 byte ñeå chöùa caùc maõ leänh ( opcode ) cuûa noù. Ta coù theå tính ñöôïc soá leänh lôùn nhaát maø 1 byte naøy coù theå maõ hoaù ñöôïc laø 256 leänh. Trong thöïc teá vieäc ghi leänh khoâng phaûi hoaøn toaøn ñôn giaûn nhö vaäy. Vieäc maõ hoaù leänh cho boä vi xöû lyù laø raát phöùc taïp vaø bò chi phoái bôûi nhieàu yeáu toá khaùc nöõa. Ñoái vôùi boä vi xöû lyù 8088 moät leänh coù theå coù ñoä daøi töø 1 ñeán 6 byte. Ta seõ chæ laáy tröôøng hôïp leänh MOV ñeå giaûi thích caùch ghi leänh noùi chung cuûa 8088. Leänh MOV ñích, goác duøng ñeå nguyeån döõ lieäu giöõa 2 thanh ghi hoaëc giöõa 2 oâ nhôù vaø thanh ghi. Chæ nguyeân vôùi caùc thanh ghi cuûa 8088, neáu ta laàn löôït ñaët caùc thanh ghi vaøo caùc vò trí toaùn haïng ñích vaø toaùn haïng goác ta thaáy ñaõ phaûi caàn tôùi haøng traêm maø leänh khaùc nhau ñeå maõ hoaù toå hôïp caùc leänh naøy. Hình 3.6 bieåu dieãn daïng thöùc caùc byte duøng ñeå maõ hoaù leänh MOV. Töø ñaây ta thaáy raèng ñeå maõ hoaù leänh MOV ta phaûi caàn ít nhaát laø 2 byte, trong ñoù 6 bit cuûa byte ñaàu duøng ñeå chöùa maõ leänh. Ñoái vôùi caùc leänh MOV. Ñeå chuyeån döõ lieäu kieåu: Thanh ghi ↔ thanh ghi ( tröø thanh ghi ñoaïn ) hoaëc Boä nhôù ↔ thanh ghi ( tröø thanh ghi ñoaïn ) thì 6 bit ñaàu naøy luoân laø 100010. Ñoái vôùi caùc thanh ghi ñaïon thì ñieàu naøy laïi khaùc. Bit W duøng ñeå chæ ra raèng 1 byte (W = 0 ) hoaëc 1 töø ( W = 1 ) seõ ñöôïc chuyeån.
Trang : 9 Byte 2
Byte 1
1 0 0 01 0 Opcode
D W mod
REG
Byte 4
Byte 3
Disp
M/R
Disp H
t
Hoaëc Di chuyeån tröïc tieáp phaàn thaáp
Di chuyeån tröïc tie phaàn cao
Hình 3.6 Daïn g thöùc Byte maõ leänh cuûa leänh MOV
Trong caùc thao taùc chuyeån döõ lieäu, moät toaùn haïng luoân baét buoäc phaûi laø thanh ghi. Boä vi xöû lyù duøng 2 hoaëc 3 bit ñeå maõ hoaù caùc thanh ghi trong CPU nhö sau:
Thanh ghi ñoaïn CS DS ES SS
Maõ
Thanh ghi W= 1 W= 0 AL AX BL PX CL CX DL DX AH SP BH DI CH BP DH SI
000 011 001 010 100 111 101 110
Maõ 01 11 00 10
Bit D duøng ñeå chæ höôùng ñi cuûa döõ lieäu. D = 1 thì döõ lieäu ñi ñeán thanh ghi cho bôûi b bit cuûa REG. 2 bit MOD ( cheá ñoä ) cuøng vôùi 3 bit R/M ( thanh ghi/boä nhôù ) taïo ra 5 bit duøng ñeå chæ ra cheá ñoä ñòa chæ cho caùc toaùn haïng cuûa leänh ( coù theå hieåu cheá ñoä ñòa chæ laø caùch tìm ra ñòa chæ cuûa toaùn haïng, xem theâm phaàn sau cuûa chöông naøy ñeå roõ hôn veà cheá ñoä ñòa chæ. Baûng 3.1 cho ta thaáy caùch maõ hoaù caùc cheá ñoä ñòa chæ ( caùch tìm ra caùc toaùn haïng baèng caùc bit naøy ). 00
01
10
11
MOD R/M
000
[BX]+[8]
[BX]+[SI]+d8
[BX]+[SI]+d16
001
[BX]+[DI]
[BX]+[DI]+d8
[BX]+[DI]+d16
010
[BP]+[SI]
[BP]+[SI]+d8
[BP]+[SI]+d16
W=0 W=1 AL AX CL CX DL DX
Trang : 10 011
[BP]+[DI]
[BP]+[DI]+d8
[BP]+[DI]+d16
100
[SI]
[SI]+d8
[SI]+d16
101
[DI]
[DI]+d8
[DI] +d16
110
d16 [BP]+d8 (Ñòa chæ tröïc tieáp) [BX] [BX]+d8
111
cheá
BL BX AH SP CH BP DH SI
[BP]+d16
[BX]+d16
BH DI
ñoä
boä
nhôù
cheá ñoä thanh ghi Ghi chuù :
-
disp , 8bit ,d16: disp , 16bit Caùc giaù trò cho trong caùc coät 2,3,4 (öùng vôùi MOD =00,01,10) laø caùc ñòa chæ hieäu duïng (EA) seõ ñöôïc coäng vôùi DS ñeå taïo ra ñòa chæ vaät lyù (rieâng BP phaûi ñöôïc coäng vôùi SP ) Trong caùc ví duï sau ñaây ta seõ duøng caùc kieán thöùc neâu treân ñeå maõ hoaù moät vaøi leänh MOV.
MOV CL ,[BX] 1
0 0 0 1
0 1
0 0 0 0 0 1 1 1 1 maõ hoaù CL [ BX]
Opcode Chuyeå n tôù i thanh ghi Chuyeå n 1 byte MOV OF3H [SI] , CL 1
0 0 0 1
0 0 0 0 1
0 0 1 1
0 0 1 1 1 1
0 0 1 1
CL Chuyeån töø thanh ghi
[SI]
dS = F3H
1 Byte
3.Caù 3.Caùc cheá cheá ñoä ñòa ñòa chæ chæ cuû cuûa boä boä vi xöû lyù lyù 8088 Cheá ñoä ñòa chæ (addressing mode ) laø caùch ñeå CPU tìm thaáy toaùn haïng cho caùc leänh cuûa noù khi hoaït ñoäng. Moät boä vi xöû lyù coù theå coù nhieàu cheá ñoä ñòa chæ. Caùc cheá ñoä ñòa chæ naøy ñöôïc xaùc ñònh ngay töø khi cheá taïo ra boä bi xöû lyù vaø sau naøy
Trang : 11 khoâng theå thay ñoåi ñöôïc. Boä vi xöû lyù 8088 vaø caû hoï 80x86 noùi chung ñeàu coù 7 cheá ñoä ñòa chæ sau: 1. Cheá ñoä ñòa chæ thanh gi ( register addressing mode ). 2. Cheá ñoä ñòa chæ töùc thì ( immediate addressing mode ). 3. Cheá ñoä ñòa chæ tröïc tieáp ( direct addressing mode ). 4. Cheá ñoä ñòa chæ giaùn tieáp qua thanh ghi ( register indirect addressing mode ). 5. Cheá ñoä ñòa chæ töông ñoái cô sôû ( based indexed relative addressing mode ). 6. Cheá ñoä ñòa chæ töông ñoái chæ soá ( indexed relative addressing mode ). 7. Cheá ñoä ñòa chæ töông ñoái chæ soá cô sôû ( based indexed relative addressing mode ). Caùc cheá ñoä ñòa chæ naøy seõ ñöôïc giaûi thích thoâng qua caùc cheá ñoä ñòa chæcuûa leänh MOV vaø leänh ADD. *cheá *cheá ñoä ñòa ñòa chæ chæ thanh ghi Trong cheá ñoä ñòa chæ naøy ngöôøi ta duøng caùc thanh ghi beân trong CPU nhö laø caùc toaùn haïng ñeå chöùa döõ lieäu caàn thao taùc. Vì vaäy khi thöïc hieän leänh coù theå ñaït toác ñoä truy nhaäp cao hon so vôùi caùc leänh coù truy nhaäp ñeân boä nhôù. Ví duï: MOV BX, DX ; chuyeån noäi dung DX vaøo BX. MOV DS,AX ; chuyeån noäi dung AX vaøo DX ADD AL,DL ; coäng noäi dung AL vaø DL roài ñöa vaøo *Cheá *Cheá ñoä ñòa ñòa chæ chæ töùc thì thì trong cheá ñoä ñòa chæ naøy toaùn haïng ñích laø moät thanh ghi hay moät oâ nhôù, coøn toaùn haïng nguoàn laø moät haèng soá vaø ta coù theå tìm thaáy toaùn haïng naøy ôû ngay sau maõ leänh ( chính vì vaäy cheá ñoä ñòa chæ naøy coù teân laø cheá ñoä ñòa chæ töùc thì ). Ta coù theå duøng cheá ñoä ñòa chæ naøy ñeå naïp döõ lieäu caàn thao taùc vaøo baát kyø thanh ghi naøo ( tröø caùc thanh ghi ñoaïn vaø thanh côø ) hoaëc vaøo baát kyø oâ nhôù naøo trong ñoaïn döõ lieäu DS. Ví duï: MOV CL, 100 ; chuyeån 100 vaøo CL. MOV AX, OFFOH ; chuyeån OFFOH vaøo AX ñeå roài ñöa MOV DS, AX ; vaøo DS ( vì khoâng theå chuyeån ; tröïc tieáp vaøo thanh ghi ñoaïn ) MOV ( BX ), 10 ; chæ DS:BX. Trong ví duï cuoái ta ñaõ duøng cheá ñoä ñòa chæ giaùn tieáp qua thanh ghi ñeå chæ ra oâ nhôù ( toaùn haïng ñích ) seõ nhaän döõ lieäu ôû cheá ñoä ñòa chæ töùc thì ( toaùn haïng nguoàn ). Taïi ñaây ( BX ) coù nghóa laø oâ nhôù coù ñòa chæ DS:BX. *Cheá *Cheá ñoä ñòa ñòa chæ chæ tröï tröïc tieá tieáp Trong cheá ñoä ñòa chæ naøy moät toaùn haïng chöùa ñòa chæ leänh cuûa oâ nhôù duøng chöùa döõ lieäu coøn toaùn haïng kia chæ coù theå laø thanh ghi maø khoâng ñöôïc laø oâ nhôù. Neáu so saùnh vôùi cheá ñoä ñòa chæ töùc thì ta thaáy ôû ñaây ngay sau maõ leänh khoâng phaûi laø toaùn haïng maø laø ñòa chæ leäch cuûa toaùn haïng. Xeùt veà phöông dieän ñòa chæ thì ñoù laø ñòa chæ tröïc tieáp.
Trang : 12 Ví duï: MOV AL, ( 1234H )
; chuuyeån noäi dung oâ nhôù DS:1234 ; vaøo AL. MOV ( 4320H ), CX ; chuyeån noäi dung CX vaøo 2 oâ nhôù ; lieân tieáp DS:4320 vaø DS:4321 *Cheá *Cheá ñoä giaù giaùn tieá tieáp qua thanh ghi Trong cheá ñoä ñòa chæ naøy moät toaùn haïng laø moät thanh ghi ñöôïc söû duïng ñeå chöùa ñòa chæ leäch cuûa oâ nhôù chöùa döõ lieäu, coøn toaùn haïng kia chæ coù theå laø thanh ghi maø khoâng ñöôïc laø oâ nhôù ( 8088 khoâng cho pheùp quy chieáu boä nhôù 2 laàn ñoái vôùi moät leänh ). Ví duï: MOV AL, ( BX ) ; chuyeån noäi dung oâ nhôù coù ñòa ; chæ DS:BX vaøo AL. MOV ( SI ), CL ; chuyeån noäi dung CL vaøo oâ nhôù ; coù ñòa chæ DS:SI. MOV ( DI ), AX ; chuyeån noäi dung AX vaøo 2 oâ nhôù ; lieân tieáp coù ñòa chæ DS:DI vaø ; DS: ( DI + 1 ). *Cheá *Cheá ñoä ñòa ñòa chæ chæ töông öông ñoái cô sôû Trong cheá ñoä ñòa chæ naøy caùc thanh ghi cô sôû nhö BX vaø BP vaø caùc haèng soá bieåu dieãn caùc giaù trò dòch chuyeån ( displacement values ) ñöôïc duøng ñeå tính ñòa chæ hieäu duïng cuûa toaùn haïng trong caùc vuøng nhôù DS vaø SS. Söï coù maët cuûa caùc giaù trò dòch chuyeån xaùc ñònh tính töông ñoái ( so vôùi cô sôû ) cuûa ñòa chæ. Ví duï: MOV CX, ( BX ) +10 ; chuyeån noäi dung 2 oâ nhôù lieân ; tieáp coù ñòa chæ DS: ( BX + 10 ) vaø ; DS: ( BX+10 ) vaøo CX. MOV CX, ( BX+10 ) ; moät caùch vieát khaùc cuûa leänh treân . MOV CX, 10 ( BX ) ; moät caùch vieát khaùc cuûa leänh ñaàu. MOV AL, ( BP ) +5 ; chuyeån noäi dung oâ nhôù SS: ( BP+5 ) ; vaøo AL. ADD AL, Table ( BX ) ; coäng AL vôùi noäi dung oâ nhôù do ; BX chæ ra trong baûng table ; ( baûng naøy naèm trong DS ), keát ; quaû döïa vaøo AL. Nhaân ñaây caàn laøm roõ moät soá thuaät ngöõ hay duøng thoâng qua caùc ví duï treân. • 10.5.Table goïi laø caùc dòch chuyeån cuûa caùc toaùn haïng töông öùng. 10 vaø 5 laø caùc giaù trò cuï theå. Table laø teân maûng bieåu dieãn kieåu dòch chuyeån cuûa maûng ( phaàn töû ñaàu tieân ) so vôùi ñòa chæ ñaàu cuûa ñoaïn döõ lieäu DS. • ( BX+10) hoaëc ( BJP+5 ) goïi laø ñòa chæ hieäu duïng (effective address. EA.theo caùch goïi cuûa Intel ). • DS: ( BX+10 ) hoaëc SS: ( BP+5 ) chính laø logic töông öùng vôùi moät ñòa chæ vaät lyù.
Trang : 13 • Theo caùch ñònh nghóa naøy thì ñòa chæ hieäu duïng cuûa moät phaàn töû thöù BX naøo ñoù ( keå töø 0 ) trong maûng Table ( BX ) thuoäc ñoaïn DS laø EA = Table+BX vaø cuûa phaàn töû ñaàu tieân laø EA = Table. *Cheá *Cheá ñoä ñòa ñòa chæ chæ töông öông ñoái chæ chæ soá soá cô sôû Keát hôïp hai cheá ñoä ñòa chæ chæ soá vaø cô sôû ta coù cheá ñoä ñòa chæ chæ soá cô sôû. Trong cheá ñoä ñòa chæ naøy ta duøng caû thanh ghi cô sôû laãn thanh ghi chæ soá ñeå tính ñòa chæ cuûa toaùn haïng. Neáu ta duøng theâm caû thaønh phaàn bieåu dieån söï dòch chuyeån cuûa ñòa chæ thì ta coù cheá ñoä ñòa chæ phöùc hôïp nhaát: cheá ñoä ñòa chæ töông ñoái chæ soá cô sôû. Ta coù theå thaáy cheá ñoä ñòa chæ naøy raát phuø hôïp cho vieäc dòa chæ õ hoaù caùc maûng hai chieàu Ví duï: MOV AX, [ BX ] [SI ]+8 ; chuyeån noäi dung 2 oâ nhôù ; lieân tieáp coù ñòa chæ ; DS:(BX+SI+8 ) vaø ; DS:(BX+SI+9 ) vaøo AX MOV AX, [BX+SI+8] ; moät caùch vieát khaùc cuûa leänh treân MOV CL, [BP+DI+5] ; chuyeån noäi dung oâ nhôù ; SS:( BP+DI+5 ) vaøo CL. *Toå ng keá *Toång keát caù caùc cheá cheá ñoä ñòa ñòa chæ chæ Caùc cheá ñòa chæ ñaõ trình baøy ôû treân coù theå toùm taét laïi trong baûng 3.2. Moät hình thöùc toång keát khaùc veà cuûa cheá ñoä ñòa chæ cuûa 8086/88 ñöôïc bieåu dieãn trrrn hình 3.7 *Phöô *Phöông öông phaù phaùp boû boû ngaà ngaàm ñònh ñònh thanh ghi ñoaï oaïn ( segment override ) Nhö trong caùc phaàn tröôùc ñaõ noùi, caùc thanh ghi ñoaïn vaø thanh ghi leäch ñöôïc ngaàm ñònh ñi keøm vôùi nhau töøng caëp duøng ñeå ñòa chæhoaù caùc toaùn haïng teong caùc vuøng khaùc nhau vuûa boä nhôõ.Baûng 3.3 chæ ra caùc khaû naêng caëp ñoâi ngaàm ñònh cuûa caùcthan ghi ñoaïn vaø thanh ghi leäch thöoàng dung. Vì tính ngaàm ñònh naøy neåntong caùc leänh ta chæ caàn vieåta caáctnh thanh ghi leäch laø ñuû cô sôû ñeå tính ra ñöôïc ñia chæ cuûa toaøn haïng. Tuy nhieân, ngoaøi caùc toå hôïp ngaàm ñònh ñaõ keå, 8088 coøn cho pheùp ta laøm vieäc vôùi caùc toå hôïp ngaàm ñònh ñaõ keå, 8088 coøn cho pheùp ta laøm vieäc vôùi caùc toå hôïp khaùc cuûa caùc thanh ghi ñoaïn vaø thanh ghi leäch. Muoán loaïi voû caùc toå hôïp ngaàm ñònh noùi treân, trung khi vieát leänh ta phaûi ghi roõ thanh ghi ñoaïn seõ duøng ñeå tính ñòa chæ vaø keøm theâm daáu 2 chaám tröôùc thanh ghi leäch. Cuïm kyù hieäu naøy goik laø cuïm tieáp ñaàu ñeå laïi boû thanh ghi ñoaïn ngaàm ñinhj (segmnent override prefix) vaø ñeå daït ñöôïc iveäc loaïi boû naøy chæ caàn ghi roõ thanh ghi ñoaïn. Baûng 3.2 : Toùm taét caùc cheá ñoä ñòa chæ
Cheá ñoä ñòa chæ
Toaùn haïng
Thanh ghi Töùc thì Tröïc tieáp Giaùn tieáp qua thanh ghi
Reg Data [offset] [BX]
Thanh ghi ñoaïn ngaàm ñònh
DS DS
Trang : 14 [SI] DS [DI] DS Töông ñoái cô sôû [BX]+disp DS [BP] +DISP SS Töông ñoái chæ soá [DI]+Disp DS [SI]+ DISP DS Töông ñoái chæ soá cô sôû [BX]+[DI]+DISP DS [BX]+[SI]+DISP DS [BP]+[DI]+DISP SS [BP]+[SI]+DISP SS (Ghi chuù : Reg : thanh ghi ; Data : döõ lieäu töùc thì ; disp : dòch chuyeån ) Baûng 3.3 : Caùc caëp thanh ghi ñoaïn vaø thanh ghi leäch ngaàm ñònh Thanh ghi ñoaïn CS DS ES SS Thanh ghi leäch IP SI,DI,BX DI SP,BP Ví duï: Trong leänh chuyeån döõ lieäu thæ ñòa chæ vaät lyù cuûa toaùn haïng ñeå chuyeån vaøo thanh ghi AL, töông öùng vôùi DS:BX, vì DS saø ñoaïn ngaàm ñònh cuarvuøng nhôù chöùatoaùn haïng do BX chæ ra.Neáu ta muoán thay ñoåi,khoâng laáy toaùn haïng trong ñoaïn döõ lieäu DS ,maø laïi laáy toaùn haïng traong ñoaïn döõ lieäu phuï ES deå ñöa vaøo AL,thì ta phaûi vieát laïi leänh treân thaønh MOV AL.ES:[BX] Trong ñoù ta ñaõ duøng cuïm tieáp ñaøu ES : ñeå loaïi boû thanh ghi ñoaïn ngaàm ñònh DS vaø ñeå chæ roõ thanh ghi ñoaïn môùi duøng trong leänh nayf baây giôø laø ES .
Trang : 15 Cheá ñoä cô sôû hoaëc chæ soá BX hoaëc BP
Cheá ñoä chæ soá cô sôû BX
SI
hoaëc
hoaëc
BP
DI
hoaëc DI hoaëc SI Dòch chuyeån
Ñòa chæ hieäu duïng
CSx16 hoaëc DSx16 hoaëc SSx16 hoaëc ESx16 Ñòa chæ vaät lyù Hình 3.7 : moät hình thöùc khaùc toång keát caùc cheá ñoä ñòa chæ cuûa 8088
4. Moâ nhcuûa boä Moâ taû taû taä taäp leä leänhcuû nhcu boä vi xöû lyù lyù 8088. Coù nhieàu caùnh trình baøy taäp leänh cuûa boä vi xöû lyù:Trình baøy cac leänh cho caùc nhoùm hoaëc theo thöù töï ABC .Ta seû choïn caùch laøm thöù 2 ñeå sau naøy deã tìm kieám cac leänh caàn tra cöùu cuï theå.Trong khi noùi tôùi caùc leänh ôû daïng gôïi nhôù tacuõng moâ taû ngaén gon luoân töøng leänh vaø taùc ñoäng (neáu coù) cuûa leänh tôùi cac côø.Ñeå cho caùc dieån giaûi deå ñoïc ta quy ñònh kí hieäu AL ñöôïc hieåu laø thanh ghi AL hoaëc laø noäi dung cuûa AL.Trong khi ghi leänh ,daáu[ X] neân ñöôïc hieåu nhö laø moät ki hieäu cuûa Intel ñeå ghi leänh.Khoâng neân hieåu laø ‘noäi dung’ cuûa X ,coøn {XX:YY} duøng ñeå chæ noäi dung oâ nhôù taïi ñòa chæ XX:YY hoaëc {SP} duøng ñeå chæ oâ nhôù cuûa ngaên xeáp coù ñòa chæ do noäi dung cuûa thanh ghi con troû ngaên xeáp SP chæ ra . AAA _ASCII Adjust after Addition (Chænh sau khi coäng hai soá ôû daïng ASCII) Döõ lieäu truyeàn töø caùc thieát bò ñaàu cuoái ñeán maùy tính thöôøng ôû döôùi daïng maõ ASCII .Khi daõ truyeàn ñi caùc soá döôùi daïng ASCII rooøi,ñoâi khi ta muoán coäng luoân caùc soá ñoù.Boä vi xöû lyù 8088 cho phep ta laøm ñieàu naøy vôùi ñieàu kieän phaûi chænh laïi keát quaû coù trong AL,baèng leänh AAA ñeå thu ñöôïc keát quaû laø soá BCD khoâng goùi. Caäp nhaät : AF , CF Khoâng xaùc ñònh: OF , PF ,SF ,ZF Ví duï:Ta coù 2 soá döôùi daïng maõ ASCII laø 30H vaø 39H öùng vôùi ‘ 0 ‘ vaø ‘ 9 ‘
Trang : 16 Neáu coäng hai soá ôû daïng maõ laïi ta ñöôïc soá 69H.Soá naùy khoâng coù yù nghóa gì vì noù khoâng phaûi la soá BCD ñuùng .Ta seû thu ñöôïc soá BCD khoâng goùi neáu duøng theâm leänh AAA . ;AL = 0011 0000B = 30H = ‘0’, ;BL = 0011 1001B = 39H = ‘ 9’, ADD AL , BL ; thu ñöôïc AL = 0110 1001B = 69H , Keát quaû sai. AAA ; thu ñöôïc AL = 0000 1001B = 9, keát quaû ñuùng. OR AL ,30H ; thu ñöôïc AL = 39H = ‘9’ ñeâ truyeàn keát quaû trôû laïi thieát bò ñaàu cuoái . AAD_ ASCII Adjust before Division (Chænh tröôùc khi chia 2 soá ô daïng ASCII ) Leänh naøy ñoåi 2 soá BCD khoânbg goùi ôû AH vaø AL sang soá heä 2 töông ñöông ñeå taïi Al.Vieâc naøy phaûi thöc hieän tröôùc khi laøm pheùp chia moät soá BCD khoâng goùi( goàm 2 chöõ soá ) ñeå trong AX cho 1 soá BCD khoâng goùi khaùc.Keát quaû vaø soá dö cuõng laø cac soá BCD khoâng goùi. Khoâng xaùc ñònh :taát caû caùc côø . Ví duï: ;AX = 0605H laø soá BCD khoâng goùi cuûa 65 ;(soá bò chia) ;BL = 08H la soá BCD khoâng goùi ;(soá chia). AAD ;sau khi chænh AX = 0041 = 41H DIV BL;sau khi chia ñöôc thöông AL = 08 ;soá dö ôû AH = 1 laø soá BCD khoâng goùi , AAM_ASCII Adjust After Mult iplication (Chænh sau khi nhaân 2 soá ôû daïng ASCII ) Leänh naøy dung ñeå ñoåi 1 soá heä 2,laø tích cuûa 2 soá BCD khoâng goùi ,coù trong AL sang soá BCD khoâng goùi ñeå taïi AX . Caäp nhaät :PF , SF ,ZP. Khoâng xaùc ñònh: AF ,CF ,OF Ví duï: Sau khi nhaân 2 soá 5 vaø 9 ôû dang ASCII .Ta ñoåi keát quaû sang daïng BCD khoâng goùi baèng leänh AAM vaø sau ñoù ñoåi tieáp thaønh maõ ASCII ñeå truyeàn tieáp ;AL = 0011 0101B = 35H = ‘5’ , ;BL = 0011 1001B = 39H = ‘9’ , MUL BL; thu ñöôïc AX = 002DH = 45, AAM; thu ñöôïc AX = 0405H, maõ BCD ;khoâng nen cuûa 45. OR AX ,3030H; thu ñöôïc AX = 3435H, maõ ASCII ;cho 45 ñeå truyeàn keát quaû ; trôû laïi thieát bò ñaàu cuoái. AAS-ASCH Adjust after Subtraction ( chænh sau khi tröø 2 soá ôû daïng ASCH )
Trang : 17 Leänh naøy duøng ñeå ñoåi moät soá heä hai laø hieäu cuûa 2 soá BCD khoâng goùi, coù ôû AL. sang soá BCD khoâng goùi. Caäp nhaäp: AF, CF. Khoâng xaùc ñònh: OF, PF, SF, ZP. Ví duï: a) ; BL = 0011 0101B = 35 = ‘5’, ; AL = 0011 1001B = 39H = ‘9’, ; ASCII 9 – ASCII 5: SUB AL, BL ; thu ñöôïc AL = 04H = 4, AAC ; thu ñöôïc AL = 04H, maõ BCD khoâng ; goùi cuûa 4. OR AL, 30H ; thu ñöôïc AL = 34H, maõ ASCII cho 4 ; ñeå truyeån keát quûa trôû laïi thieát bò ; ñaàu cuoái. ; AL = 0011 0101B = 35H = ‘5’, b) ; BL = 0011 1001B = 39H = ‘ 9’, ; ASCII 5- ASCII 9: SUB AL, BL ; thu ñöôïc AL = FCH = -4, CF = 1, AAS ; thu ñöôïc AL = 04H, maõ BCD khoâng ; goùi cuûa 4, CF = 1 ( coù theå duøng cho caùc ; pheùp tröø nhieàu chöõ soá ) ADC-Add With Carry ( coïng coù nhôù ) Vieát leänh: ADC Ñích, c. Ñích, Goá Goác. Moâ taû: Ñích Ñích + Goác + CF Trong ñoù tôùn haïng ñích vaø goác coù theå tìm ñwocj theo caùc cheá ñoä ñòa chæ khaùc nhau. Nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Ñieàu haïn cheá naøy cuõng aùp duïng cho caùc leänh khaùc coù ngöõ phaùp töông töï. Caäp nhaät: AF, CF, OF, PF, SP, ZP. Ví duï: Caùc ví duï sau ñaây coù theå ñaïi dieän choù caùc cheá ñoä ñòa chæ coù theå coù trong leänh coäng naøy cuõng nhö moät soá caùc leänh khaùc vöùoi ngöõ phaùp töông töï. ADD-Add ( coäng 2 toaùn haïng). Vieát leänh: ADD Ñích, Goác. Moâ taû: Ñích - Ñích + Goác. Troùng ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhoù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Coù theå tham khaûo caùc ví duï cuûa leänh ADC.
Caäp nhaät: AF, CF, PF, SF, ZP/
AND-And Corresponding Bits of Two Operands ( Vaø 2 toaùn haïng ) Vieát leänh: AND Ñích, Goác Moâ taû: Ñích - Ñích, Goác. Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc thoe caùc cheá ñoä ñòa chæ khaùc nhau. Nhöng phaûi chöùa döõ lieäu cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø
Trang : 18 2 oâ nhôù vaø cuõng khoâng ñöôïc laø thanh ghi ñoaïn. Pheùp AND thöôøng duøng ñeå che ñi/ giöõ laïi moät vaøi bit naøo ñoù cuûa moät toaùn haïng baèng caùch nhaân logic toaùn haïng ñoù vôùi toaùn haïng töùc thì coù caùc bit 0/1 ôû caùc choã caàn che ñi/giöõ nguyeân töông öùng ( toaùn haïng töùc thì luùc naøy coøn ñöôïc goïi laø maët naï ). Xoaù: CF, OF. Caäp nhaät: PF, SF, ZP, PF chæ coù nghóa khi toaùn haïng laø 8 bit. Khoâng xaùc ñònh: AØ. Ví duï: AND AL, BL ; AL , AL BL theo töøng bit. AND OFH ; che 4 bit cao cuûa BL. CALL-Call o Proceduce ( Goïi chöông trình con )
Moâ taû:
Leänh naøy duøng ñeå chuyeån hoaït ñoäng cuûa boä vi xöû lyù töø chöông trình chính ( CTC ) sang chöông trình con ( ctc ). Neáu ctc ôû trong cuøng moät ñoaïn maõ vôùi CTC thì ta coù goïi gaàn ( near call ). Neáu CTC vaø ctc naèm ôû hai ñoaïn maõ khaùc nhau thì tra coù goïi xa ( far call ). Goïi gaàn vaø goïi xa khaùc nhau veà caùch taïo ra ñòa chæ trôû veà ( return address). Ñòa chæ trôû veà laø ñòa chæ cuûa leänh tieùp ngay sau leänh Call. Khi goïi gaàn thì chæ caàn caùc IP cuûa ñòa chæ trôû veà ( vì CS khoâng ñoåi ). Khi goïi xa thì phaûi caát caû CS vaø IP cuûa ñòa chæ trôû veà. Ñòa chæ trôû veà ñöôïc töï ñoäng caát taïi ngaên xeáp khi baét ñaàu thöïc hieän leänh goïi vaø ñöôïc töï ñoäng laáy ra khi gaëp leänh RET ( trôû veà CTC töø ctc ) taïi cuoái ctc. Vieát leänh: Sau ñaây laø ví duï caùc daïng khaùc nhau cuûa caùc daïng khaùc nhau cuûa caùc leänh goïi ctc vaø caùch tính ñòa chæ cuûa ctc: CALL Multiple: Goïi ctc coù teân laø Multiple trong cuøng ñoaïn maõ vôùi CTC, ctc naøy phaûi naèm trong giôùi haïn ñích chuyeån-32Kbyte ( dòch veà phaùi ñòa chæ thaáp ) hoaëc ( 32K-1) byte ( dòch veà phía ñòa chæ cao ) so vôùi leänh tieáp theo ngay sau leänh Call. Sau khi caát IP cuõ ( ñòa chæ trôû veà ) vaøo ngaêng xeáp . IP môùi ñöôïc tính: IP –IP + Dòch chuyeån. CALL Divi: Goïi ctc coù teân Divi ôû ñaïon maõ khaùc. Trong chöông trình hôïp ngöõ Divi phaûi ñöôïc khai baùo laø moät ctc ôû xa: Divi Proc Far Ñaïi chæ cuûa ctc laø ñaïi chæ CS:IP caûu Divi. CALL WORD PTR [ BX ]: Goïi ctc naèm trong cuøng ñaïon maõ, ctc coù ñòa chæ dòch chuyeån ( tính töø leänh tieáp ngay sau leänh goïi tôùi leänh ñaàu tieân cuûa ctc ) chöùa trong 2 oâ nhôù do BX vaø BX+1 chæ ra trong ñoaïn DS. Ñòa chæ leäch naøy seõ ñöa vaøo IP ( SI, DI coù theå duøng thay choã cuûa BX ). CALL DWORD PTR [ BX ]: Goïi ctc khoâng naèm trongcuøng moät ñoaïn maõ, ctc coù ñòa chæ CS:IP, giaù trò gaàn cho IP vaø CS chöùa trong 4 oâ nhô do BX vaø BX +1 (cho IP) vaø BX+2 vaø BX+3 ( cho CS chæ ra trong ñoaïn DS ( SI, DI coù theå duøng thay choã cuûa BX ). CBW-Convert a Byte to a Word ( Chuyeån byte thaønh töø ) Leänh naøy môû roäng bit daáu cuûa AL sang 8 bit cuûa AH, AH luùc naøy ñöôïc goïi laø phaàn môû roäng daáu cuaû AL. Ta duøng CBW ñeå môû roäng daáu cho soá coù daáu naèm trong AL tröôùc khi muoán chia noù cho moät soá coù daáu 8 bit khaùc baèng leänh IDIV
Trang : 19 ( leänh chia caùc soá coù daáu ), hoaëc tröôùc khi muoán nhaân noù vôùi moät soá coù daáu 16 bit khaùc baèng leänh IMUL, ( leänh nhaân caùc soá coù daáu ).
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
Ví duï: Neáu AL = 80 thì sau leänh chuyeån ta coù AX = PF80H. CLC-Clear the Carry Flag ( xoaù côø nhôù ) Moâ taû: CF – 0.
Khoâng taùc ñoän ñeán caùc côø khaùc.
CLD – Clear the Direction Flag ( xoaù côø höôùng ). Moâ taû: DF – 0. Leänh naøy ñònh höôùng thao taùc theo chieàu trieán choù caùc leänh lieân quan ñeán chuoãi. Caùc thanh ghi lieân quan laø SI vaø DI seõ ñöôïc töï ñoäng taêng khi laøm vieäc xong vôùi moät phaàn töû cuûa chuoãi.
Khoâng taùc ñoäng ñeán caùc côø khaùc.
CLI – Clear the Interrupt Flag ( xoùa côø cho pheùp ngaét ). Moâ taû: IF – 0. Leänh naøy xoaù côø cho pheùp ngaét. Caùc yeáu toá ngaét che ñöôïc seõ bò che.
Khoâng taùc ñoäng ñeán caùc côø khaùc.
CMC – Complement the Carry Flag ( Ñaûo côø nhôù ). Moâ taû: CF – CF. Caäp nhaät: CF
Khoâng taùc ñoäng ñeán caùc côø khaùc.
CMP-Compare Byte or Word *~( so saùnh 2 byte hay 2 töø ). Vieát leänh: CMP Ñích, c. Ñích, Goá Goác. Moâ taû: Ñích – Goác. Trong ñoù toaùn haïng ñích vaø goác coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Nhöng phaûi chöùa döõ lieäu coù cuøng ñoä daøi vaø khoâng ñöôïc pheùp ñoàng thôøi laø 2 oâ nhôù. Leänh naøy chæ taïo caùc côø, khoâng löu keát quaû so sanh, sau khi so sanh caùc toaùn haïng khoâng bò thay ñoåi. Leänh naøy thöôøng ñöôïc duøng ñeå taïo côø cho caùc leänh nhaûy coù ñieàu kieän ( nhaûy theo côø ). Caùc côø chính theo quan heä ñích vaø goác khi so saùnh 2 soá khoâng daáu: CF 2F Ñích = Goác 0 1 Ñích > Goác 0 1 Ñích > Goác 1 0 Caäp nhaät: AF, CF, OF, PF, SF, ZP. CMPS/CMPSB/CMPSW-Compare String Bytes or String Word ( so saùnh 2 chuoåi byte hay 2 chuoåi töø ). Vieát leänh: CMPS Chuoå c. Chuoåi ñích, ñích, chuoå chuoåi goá goác. CMPSB CMPSW. Moâ taû: Chuoåiñích – Chuoåigoác. Leänh naøy so saùnh töøng phaàn töû ( byte hay töø ) cuûa 2 xaâu coù caùc phaàn töû cuøng loaïi. Leänh chæ taïo caùc côø, khoâng löu keát quaû so saùnh, sau khi so saùnh caùc toaùn
Trang : 20 haïng khoâng bò thay ñoåi. Trong leänh naøy ngaàm ñònh caùc thanh ghi vôùi caùc chöùc naêng: +DS:SI laø ñòa chæ cuûa phaàn töû so saùnh trong chuoãi goác. +ES:DI laø ñòa chæ cuûa phaàn töû so saùnh trongchuoãi ñích.. Ta seõ giaûi thích cuï theå caùc tröôøng hôïp duøng caùc daïng leänh treân. Giaûi thích naøy cuõng coù theå aùp duïng cho caùcleän coù daïng thöùc leän hoaëc caáu truùc ngöõ phaùp öông töï. MOVS, STOS, LODS, SCAS. Coù 2 caùch ñeå chæ ra moät chuoãi laø chuoãi byte hoaëc chuoãi töø. Caùch ñaàu tieân laø ta khai roõ baèng ten ngay töø ñaàu chuoãi nguoàn vaø chuoãi ñích laø loaïi gì. Sau ñoù ta duøng leänh COMPS ñeå thao taùc vôùi caùc chuoãi ñoù. StrByte1 DB “daylachuoibyte1” StrByte2 DB “ daylachuoibyte2” StrWord1 DW “ daylachuoitö1” StrWord1 DW “daylachuoitu2” LEA SI, StrByte1 LEA DI, StrByte2 COMPS StrWord2, StrWord1 ;coù theå thay ; baèng MOMPSB. Caùch ths hai laø ta theâm vaøo leänh CMPS ñuoâi thích hoeïp ñeå baùo cho chöông trình dòch bieát kieåu thao taùc treân chuoãi ñaõ ñöôïc ñònh nghóa: ñuoâi “B” ñeå thao taùc vôùi byte hoaëc ñuoâi “W”ñeå thao taùc vôùi töø trong chuoãi.
Caäp nhaät: AF, CF, OF, PF, SF, ZP. Ví duï: MOV DI, OFFSET
chuoãiñích
; laáy ñòa chæ leäch ; cuûa chuoãiñích taïi ; ES vaøo SI, MOV SI, OFFSET chuoãigoác ; laáy ñòa chæ leäch ; cuûa chuoãigoác taïi ; DS vaøo SI, CLD ; laøm vieäc vôùi chuoåi theo ; chieàu tieán, CMPSB ; chuyeån 1 byte. ; SI vaø DI taêng theâm 1. CWD-Convert a Word to a DoubleWord ( chuyeån töø thaønh töø keùp ) Leänh naøy môû roäng bit daáu cuûa AX sang 16 bit cuûa DX. DX luùc naøy ñöôïc goïi laø phaàn môû roäng daáu cuûa AX. Ta duøng CWD ñeå môû roäng daáu cho soá coù daáu naèm trong AX tröôùc khi muoán chia noù cho moät soá coù daáu khaùc baèng leänh IDIV.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
Ví duï: neáu DX = 0000H. AX = 8087H thì sau leänh ñoåi ta coù: DX = FFFFH, AX = 8086H. DAA-Decimal Adjust AL after BCD Addition ( chænh AL sau khi coäng soá BCD ).
Trang : 21 Leänh naøy duøng ñeå chænh laïi keát quaû ( hieän naèm ôû AL ) sau pheùp coäng 2 soá BCD. Lyù do phaûi chænh laïi keát quaû naøy laø do ta ñaõ duøng boä ALU cuûa XPU, coán chæ bieát laøm toaùn vôùi caùc soá heä hai. Ñeå laøm otaùn vôùi caùc soá VCD, leänh DAÂ chæ taùc ñoä ñuùng ñeán keát quaû ôû AL ngay sau khi vöøa thöïc hieän pheùp coäng. Hoaït ñoäng cuûa leänh DAA: +Neáu 4 bit thaáp caûu AL lôùn hôn 9 hoaëc AF = 1 thì AL – AL + 6 . +Neáu 4 bit cao cuûa AL lôùn hôn 9 hoaëc CF = 1 thì AL – AL + 60H.
Caäp nhaät: AF, CF, PF, SF, ZP. Khoâng xaùc ñònh: OF. Ví duï: a)
; AL = 0101 1001BCD = 59 ; BL = 0011 0110BCD = 36 ADD AL, BL ; AL = 1000 1111 B = 8FH DAA ; vì F > 9 neân AL + 6 = 1001 0101BCD = 95 b) ; AL = 1000 1001BCD = 89 ; BL = 0100 0111BCD = 47 ADD AL, BL ; AL = 1101 0000 B = D0H, AF = 1 DAA ; vi D > 9 vaø AØ = 1 neân ; AL + 60H +6 = 1001 0000BCD = 36,CF = 1. DAS- Decimal Adjust AL after BCD Subtraction ( chænh AL sau khi tröø 2 soá BCD ) Leänh naøy duøng ñeå chænh laïi keát quaû ( hieän naèm ôû AL ) sau pheùp tröø 2 soá BCD. Lyù do phaûi chænh laïi keát quû naøy laø do ta ñaõ duøng boä ALU cuûa CPU, voán chæ bieát laøm toaùn vôùi caùc soá heä höi, ñeå laøm toaùn vcôùi caùc soá BCD. Leänh DAS chæ taùc ñoäng ñuùng ñeán keát quaû ôû AL ngay sau khi vöøa thöïc hieän pheùp tröø. Hoaït ñoäng cuûa leänh DAS: +Neáu 4 bit thaáp cuûa AL lôùn hôn 9 hoaëc AF = 1 thì AL – AL.6. +Neáu 4 bit cao cuûa AL lôùn hôn 9 hoaëc CF = 1 thì AL – AL.60H.
Caäp nhaät: AF, CF, PF, SP ,ZP. Khoâng xaùc ñònh: OF. Ví duï: a)
; AL = 0101 0110BCD = 56 ; BL = 0011 1001BCD = 39 SUB AL, BL ; AL = 0001 1101B = 1DH. DAS ; vì D > 9 neân AL-6 = 0001 1001BCD = 99, CF. Trong thí duï treân CF = 1 coù nghóa laø phaûi möôïn 100 theâm vaøo soá bò tröø ñeå ñöôïc keát quaû laø 99. Noùi caùch khaùc ñi keát quaû ñuùng seõ laø -1. DEC – Decrement Destination Register or Memory ( Giaûm toaùn haïng ñi 1 ).
Vieát leänh : Moâ taû:
DEC Destination Ñích Ñích Ñí ch – Ñí ch -1.
Trong ñoù toaùn haïng ñích coù theå tìm ñöïoc thöo caùc cheá ñoä ñòa chæ khaùc nhau. Löu yù laø neáu Ñích = 00H ( hoaëc 0000H ) thì Ñích -1 = FFH ( hoaëc FFFFH )
Trang : 22 maø khoâng laøm aûnh höôûng ñeán côø CF. Leänh naøy cho keát quaû töông ñöông nhö leänh SUB Ñích nhöng chaïy nhanh hôn.
Caäp nhaät: AF, OF, PF, SF, ZP. Khoâng taùc ñoäng: CF/
DIV – Unsingned Divide ( chia 2 soá khoâng coù daáu )
Vieát leänh:
DIV Go Goáác
Trong ñoù toaùn haïng Goác laø soá chia vaø coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Moâ taû: tuyø theo ñoä daøi cuûa toaùn haïng goác ta coù 2 tröôøng hôïp boá trí pheùp chia. Caùc choã ñeå ngaàm ñònh cho soá bò chia vaø keát quaû: • Neáu Goác laø soá 8 bit: AX/Goác. Soá bò chia phaûi laø soá khoâng daáu 16 bit ñeå trong AX. • Neáu Goác laø soá 16 bit: DXAX/Goác. Soá bò chia phaûi laø soá khoâng daáu 32 bit ñeå trong caëp thanh ghi DXAX. Neáu thöông khoâng phaûi laø soá nguyeân noù ñöôïc laøm troøn theo soá nguyeân saùt ñuoâi. Neáu Goác = 0 hoaëc thöông thu ñöôïc lôùn hôn FFH hoaëc FFFFH ( tuyø theo ñoä daøi cuûa toaùn haïng Goác ) thì 8088 thöïc hieän leänh ngaét INT 0.
Khoâng xaùc ñònh: AF, CF, OF, PF, SF, ZP.
ESC – Escape Leänh naøy duøng ñeå truyeâng caùc leänh cho boä ñoàng xöû lyù toaùn hoïc 8087 bò taïm döøng vaø boä vi xöû lyù 8088 böôùc vaøo traïng thaùi döøng. Ñeå thoaùt khoûi traïng thaùi döøng chæ coù caùch taùc ñoäng vaøo moät trong caùc chaân INTR.NMI. hoaëc RESET cuûa boä vi xöû lyù. IDIV – Integer Division ( Signed division ) ( chia soá coù daáu )
Vieát leänh: IDIV Go Goáác Trong ñoù toaùn haïng Goác laø soá chia vaø coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau.
Ñaây laø leänh duøng ñeå chia caùc soá nguyeân coù daáu. Choã ñeå ngaàm ñònh cuûa soá chia. Soá bò chia. Thöông vaø soá dö gioáng nhö ôû leänh DIV. chæ coù 2 ñieàu khaùc laø: +Sau pheùp chia AL chöùa thöông ( soá coù daáu ). AH chöùa soá dö ( soá coù daáu ). +Daáu cuûa soá coù dö seõ truøng vôùi daáu cuûa soá bò chia. +Neáu Goác = 0 hoaëc thöông naèm ngoaøi daûi.128…+ 127 hoaëc 32768…+32767 ( tuyø theo ñoä daøi cuûa Goác ) thì 8088 thöïc hieän leänh ngaét INT 0.
Khoâng xaùc ñònh: AF, CF, OF, PF, SF, ZP.
ñaàu ).
IMUL – Integer Multiplication ( Multiply Signed Numbers ) ( Nhaân soá coù
Vieát leänh: IMUL Go Goáác. c. Troâng doá toaùn haïng Goác laø soá nhaân vaø coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Moâ taû: tuyø theo ñoä daøi cuûa toaùn haïng Goác ta coù 2 tröông hôïp boá trí pheùp nhaân. Choã ñeå ngaàm ñònh cho soù bò nhaân vaø keát quaû: • Neáu Goác laø soá coù daáu 8 bit: ALxGoác.
Trang : 23 Soá bò nhaân phaûi laø soá cso daáu 8 bit ñeå trong AL. • Neáu Goác laø soá coù daáu 16 bit: AXxGoác. Soá bò nhaân phaûi laø soá coù daáu 16 bit ñeå trong AX. Neáu tích thu ñöôïc nhoû, khoâng ñuû laáp ñaày heát ñöôïc caùc choã daønh cho noù thì caùc bit khoâng duøng ñeán ñöïôc thay baèng bit daáu. Neáu byte cao ( hoaëc 16 bit cao ) cuûa 16 ( hoaëc 32 bit ) keát quaû chæ chöa moät giaù trò cuûa daáu thì CF = OF = 0. Neáu byte cao ( hoaëc 16 bit cao ) cuûa 16 ( hoaëc 32 ) bit keát quûa chöùa moät phaàn keát quaû thì CF = OF = 1. Nhö vaäy CF vaø OF seõ baùo cho ta bieát keát quaû caàn ñoä daøi thöïc chaát laø bao nhieáu. Ví duï: Neáu ta caàn nhaân moät soá coù daáu 8 bit vôùi moät soá coù daáu 16 bit, ta ñeå soá 16 bit ôû goác vaø soá 8 bit ôû AL. Soá 8 bit naøy ôû AL caàn phaûi ñöôïc môû roäng daáu sang AH baêng leänh CBW. Sau cuøng chævieäc duøng leänh IMUL goác vaø keát quaû coù trong caëp DXAX.
Caäp nhaät:CF, OF. Khoâng xaùc ñinh: AF, PF, FS, ZP.
In- Input Data From a Port ( ñoïc döõ lieäu töø coång vaøo thanh ACC.
Vieát leänh: In ACC, Port. Moâ taû: ACC <- {Port}.
Trong ñoù {Port } laø döõ lieäu cuûa coång coù ñòa chæ laø Port. Port laø ñòa chæ 8 bit cuûa coång, noù coù theå coù caùc giaù trò trong khoaûng 00H…FFH. Nhö vaäy ta coù theå coù caùc khaû naêng sau: +Neáu ACC laø AL thì döõ lieäu 8 bit ñöôïc ñöa vaøo töø coång Port. +Neáu ACC laø AX thì döõ lieäu 16 bit ñöôïc ñöa vaøo töø coång Port vaø coång Port+1. Coù moät caùch khaùc ñeå bieåu dieån ñòa chæ coång laø thoâng qua thanh ghi DX. Khi duøng thanh ghi DX ñeå chöùa ñòa chæ coång ta seõ coù khaû naêng ñòa chæ coång hoaù meàm deõo hôn. Luùc naøy ñòa chæ coång naèm trong daûi 0000H..FFFFH vaø ta phaûi vieát leänh theo daïng: In ACC, DX. Trong ñoù DX phaûi ñöôïc gaén töø tröôùc giaù trò öùng vôùi ñòa chæ coång.
Leänh naøy khoâng taùc ñoäng ñeán caùc côø.
theâm 1 ).
Inc-Increment Destination Register or Memory ( taêng toaùn haïng ñích
Vieát leänh : Inc-Ñí Inc-Ñích Ñích Moâ taû: Ñích <- Ñích+1.
Trong ñoù toaùn haïng ñích coù theå tìm ñöôïc theo caùc cheá ñoä ñòa chæ khaùc nhau. Löu yù laø neáu ñích = FFH ( hoaëc FFFFH ) thì Ñích+1 = 00H (0000H ) maø khoâng aûnh höôûng ñeán côø CF. Leänh naøy cho keát quaû töông ñöông nhö leänh ADD Ñích.1.nhöng chaïy nhanh hôn. Caäp nhaät: AF, OF, PF, SF, ZP. Khoâng taùc ñoäng: CF.
Trang : 24
).
INT-Interupt Program Execution ( ngaét, giaùn ñoaïn chöông trình ñang chaïy
Vieát leänh: INT N, N = 0..FFH Moâ taû: caùc thao taùc cuûa 8088 khi chaïy leänh INT N:
1. SP <- SP-2, {SP} <- FR 2. IF <- 0 ( caám caùc ngaét taùc ñoäng ). TF <-0 ( chaïy suoát ). 3. SP <- SP-2, {SP} <- CS 4. SP <- SP-2, {SP} <- IP 5. {Nx4} <- IP, {Nx4+2} <-CS. Ví duï vôùi N = 8 thì CS <- {0022H}. IP <- {0020H}. Moãi leänh ngaét öùng vôùi chöông trình phuïc vuï ngaét ( CTPVN ) khaùc nhau coù ñòa chæ laáy töø baûng veto ngaét. Baûng naøy goàm 256 vecto, chöùa ñòa chæ cuûa caùc CTPVN töông öùng vaø chieám 1Kbyte Ram coù ñòa chæ thaáp nhaát cuûa boä nhôù. CTPVN cuõng coù theå ñöôïc goïi laø chöông trình con phuïc vuï ngaét ( CTCPVN ) vì caùch thöùc toå chöùc vaø quan heä giöõa noù vôùi chöông trình bò ngaét cuõng gioáng nhö caùch thöùc toå chöùc vaø quan heä giöõa CTC vôùi ctc. INTO-Interrupt On Overflow ( ngaét neáu coù traøn ). Neáu coù traøn ( OF = 1 ) thì leänh naøy ngaét coâng vieäc ñang laøm cuûa vi xöû lyù vaø thöïc hieän leänh ngaét INT 4. IRET-Interrupt Return ( trôû veà CTC töø chöông trình ( Con ) phuïc vuï ngaét ). Nhö ñaõ trình baøy ôû leänh CALL, taïi cuoái ctc phaûi coù leänh trôû veà ( RET ) ñeå boä vi xöû lyù töï ñoäng laáy laïi ñòa chæ trôû veà CTC. Trong tröôøng hôïp CTCPVN, ñeå trôû veà CTC vôùi ñaày ñuû thoâng tin caàn thieát veà ñòa chæ vaø traïng thaùi, taát nhieân phaûi caàn coù leänh vôùi caùc taùc ñoäng töông öùng: leänh IRET. Leänh naøy, ngoaøi vieäc töï ñoäng laáy laïi ñòa chæ trôû veà CTC, coøn laáy laïi thanh ghi côø ñaõ ñöôïc caát giöõ tröôùc khi chaïy CTCPVN. JA/JNBE-Jump If Above/Jump If Not Below Or Equal ( nhaûy neáu cao hôn/nhaûy neáu khoâng thaáp hôn hoaëc baèng ). Vieát leänh: JA NHAN JNBE NHAN
Mä taí IP ←IP → Dëchchuyãø n Hai lãû nh trãn âiãö u khiãø n cuì ng mäü t thao taï c Nhaí y coï âiãö u kiãû n våï i nhaí n nãú u CF+ZF = 0 .Quan hãû “trãn “ (above),” cao hån “ vaì quan hãû “dæåï i “ , “ tháú p hån” (below) laì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n ) âäü låï n cuí a hai säú khäng dáú u .Nhaî n NHAN phaí i nàò m caï ch xa (dëch chuyãø n mäü t khoaí ng )-128. . +127byte so våï i lãû nh tiãú p theo sau lãû nh A:/INBE .Chæång trçnh seî càn cæï vaì o giaï trë chuyãø n âãø xaï c âënh caï c giaï trë chuyãø n
Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vi duû :Nãú u 1 khung thanh AL cao hån 10H thç nhaí y lãn nhaî n TH01 CMP AL , 10H ; so saï nh Al våï i 10H UA THOI ; nhaí y lãn TH01 nãú u Al cao hån
Trang : 25 4AE/JNB/4NC – 4jump if Above or Equal /jump if not below /jump if no carry ( nhaí y nãú u cao hån hoàû c bàò ng / nhaí y nãú u tháú p hån / nhaí y nãú u khäng coï nhoí ) Viãú t lãû nh : JAE NHAN JNB NHAN JNC NHAN Mä taí : IP ←IP → Dëchchuyãø n Ba lãû nh trãn âãö u thæû c hiãû n cuì ng mäü t thao taï c : nhaí y coï âiãö u kiãû n tåï i NHAN nãú u CF = 0 . Quan hãû “trãn “ (above),” cao hån “ vaì quan hãû “dæåï i “ , “ tháú p hån” (below) laì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n ) âäü låï n cuí a hai säú khäng dáú u .Nhaî n NHAN phaí i nàò m caï ch xa (dëch chuyãø n mäü t khoaí ng )-128. . +127byte so våï i lãû nh tiãú p theo sau lãû nh A:/INBE .Chæång trçnh seî càn cæï vaì o giaï trë chuyãø n âãø xaï c âënh caï c giaï trë chuyãø n Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u näü i dung thanh AL cao hån hoàû c bàò ng 10H thç nhaí y âãú n nhaî n THOI CMP AL ,10H ; So saï nh AL våï i 10H JAE .THOI ; nhaí y âãú n THOI nãú u Al cao hån hoàû c bàò ng 10H JB/JC/JNAE - jump if Below/ Jump if Carry /Jump ç Not Above or Equal ( Nhaí y tháú p hån / nhaí y nãú u coï / nhaí y nãú u khäng cao hån hoàû c bàò ng )
Viãú t lãû nh JB NHAN JC NHAN JNAE NHAN Ba lãû nh trãn âãö u thæû c hiãû n cuì ng mäü t thao taï c : nhaí y coï âiãö u kiãû n tåï i NHAN nãú u CF = 0 . Quan hãû “trãn “ (above),” cao hån “ vaì quan hãû “dæåï i “ , “ tháú p hån” (below) laì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n ) âäü låï n cuí a hai säú khäng dáú u .Nhaî n NHAN phaí i nàò m caï ch xa (dëch chuyãø n mäü t khoaí ng )-128. . +127byte so våï i lãû nh tiãú p theo sau lãû nh A:/INBE .Chæång trçnh seî càn cæï vaì o giaï trë chuyãø n âãø xaï c âënh caï c giaï trë chuyãø n Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u näü i dung thanh AL tháú p hån hoàû c bàò ng 10H thç nhaí y âãú n nhaî n THOI CMP AL ,10H ; So saï nh AL våï i 10H JB THOI ; nhaí y âãú n THOI nãú u Al tháú p hån hoàû c bàò ng 10H JBE/JNA- jump if Below/ Jump if Carry /Jump ç Not Above or Equal ( Nhaí y tháú p hån / nhaí y nãú u coï / nhaí y nãú u khäng cao hån hoàû c bàò ng ) Viãú t lãû nh : JBENHAN IBA NHAN Mä taí : IP ←IP → Dëchchuyãø n Hai lãû nh trãn âãö u thæû c hiãû n cuì ng mäü t thao taï c : nhaí y coï âiãö u kiãû n tåï i NHAN nãú u CF+ZF=1 . Quan hãû “trãn “ (above),” cao hån “ vaì quan hãû “dæåï i “ , “ tháú p hån”
Trang : 26 (below) laì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n ) âäü låï n cuí a hai säú khäng dáú u .Nhaî n NHAN phaí i nàò m caï ch xa (dëch chuyãø n mäü t khoaí ng )-128. . +127byte so våï i lãû nh tiãú p theo sau lãû nh A:/INBE .Chæång trçnh seî càn cæï vaì o giaï trë chuyãø n âãø xaï c âënh caï c giaï trë chuyãø n Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u näü i dung thanh AL tháú p hån hoàû c bàò ng 10H thç nhaí y âãú n nhaî n THOI CMP AL ,10H ; So saï nh AL våï i 10H JBE THOI ; nhaí y âãú n THOI nãú u Al tháú p hån hoàû c bàò ng 10H JBE/JNA- jump if Below/ Jump if Carry /Jump ç Not Above or Equal ( Nhaí y tháú p hån / nhaí y nãú u coï / nhaí y nãú u khäng cao hån hoàû c bàò ng ) Viãú t lãû nh : JCXZ NHAN Mä taí : IP ←IP + Dëchchuyãø n Âáy laì lãû nh nhaí y âiãö u kiãû n tåï i NHAN nãú u CX =0 vaì khäng coï liãû n hãû gç våï i cåì ZF . Nhaî n NHAN phaí i nàò m caï ch xa (di chuyãø n mäü t khoaí ng ) -128. . +127byte so våï i lãû nh tiãú p theo sau lãû nh A:/INBE .Chæång trçnh seî càn cæï vaì o giaï trë chuyãø n âãø xaï c âënh caï c giaï trë chuyãø n Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u thanh CX räù ng thç nhaí y âãú n lãû nh THOI : JCXZ THOI : THOI :RET ; Troí vãö CTC nãú u CX = 0 JE/JZ - Jump ç Equal /jump if Zero ( Nhaí y nãú u bàò ng nhau /Nhaí y nãú u kãú t quaí bàò ng khäng ) Viãú t lãû nh : JE NHAN JZ NHAN
Mä taí IP ←IP + Dëchchuyãø n Hai lãû nh trãn âãö u thæû c hiãû n cuì ng mäü t thao taï c : nhaí y (coï âiãö u kiãû n ) tåï i NHAN nãú u ZF=1.Nhaî n NHAN phaí i nàò m caï ch xa (dëch chuyãø n mäü t khoaí ng )-128. . +127byte so våï i lãû nh tiãú p theo sau lãû nh JE/JZ .Chæång trçnh seî càn cæï vaì o giaï trë chuyãø n âãø xaï c âënh caï c giaï trë chuyãø n Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u näü i dung thanh AL bàò ng 10H thç nhaí y âãú n nhaî n THOI SUB AL ,10H ; AL træì giaï trë cáö n quan tám JE THOI ; Nhaí y âãú n THOI nãú u AL bàò ng 10H Viãú t lãû nh : JGNHAN JNLENHAN Mä taí IP ←IP + Dëchchuyãø n
Trang : 27 Hai lãû nh trãn âãö u thæû c hiãû n cuì ng mäü t thao taï c : nhaí y (coï âiãö u kiãû n ) tåï i NHAN nãú u (SF⊕OF)+ZF =0 . Quan hãû “låï n hån “ (greater than ),” beï hån “(less than) vaì ì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n ) âäü låï n cuí a hai säú khäng dáú u .Låï n hån coï nghéa laì dæång hån .Nhaî n NHAN phaí i nàò m caï ch xa (dëch chuyãø n mäü t khoaí ng )-128. . +127byte so våï i lãû nh tiãú p theo sau lãû nh JG/JNLE .Chæång trçnh seî càn cæï vaì o giaï trë chuyãø n âãø xaï c âënh caï c giaï trë chuyãø n Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì Vê duû : Näü i dung caï c thanh AL låï n hån 10H thç nhaí y âãú n nhaí n THOI CMP AL , 10H ; So saï nh AL våï i 10H JG THOI ; Nhaí y âãú n THOI nãú u AL låï n hån 10H JGE/JNL - Jump if Greater than or Equal /Jump if Not Less than (Nhaí y nãú u låï n hån hoàû c bàò ng / Nhaí y nãú u khäng beï håï n ) Viãú t lãû nh JGE NHAN JNL NHAN Mä taí IP ←IP + Dëchchuyãø n Hai lãû nh trãn âãö u thæû c hiãû n cuì ng mäü t thao taï c : nhaí y (coï âiãö u kiãû n ) tåï i NHAN nãú u (SF⊕OF =0 . Quan hãû “låï n hån “ (greater than ),” beï hån “(less than) vaì ì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n ) âäü låï n cuí a hai säú khäng dáú u .Låï n hån coï nghéa laì dæång hån .Nhaî n NHAN phaí i nàò m caï ch xa (dëch chuyãø n mäü t khoaí ng )-128. . +127byte so våï i lãû nh tiãú p theo sau lãû nh JG/JNLE .Chæång trçnh seî càn cæï vaì o giaï trë chuyãø n âãø xaï c âënh caï c giaï trë chuyãø n Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì Vê duû : Nãú u näü i dung thanh AL låï n hån hoàû c bàò ng 10H thç nhaí y âãú n nhaî n THOI : CMP AL , 10H ; So saï nh AL våï i 10H
Viãú t lãû nh :
Mä taí :
JG NHAN JNLE NHAN IP ← IP + Dëchchuyãø n.
Hai lãû nh trãn biãø u diãù n cuì ng mäü t thao taï c : nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u (SF⊕OF)+ZF=0. Quan hãû “låï n hån” (greater than) vaì “beï hån “ (less than) laì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n) cuí a 2 säú coï dáú u. Låï n hån coï nghéa laì dæång hån. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau
Trang : 28
lãû nh JG/JNLE . chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì : Vê duû : Nãú u näü i dung thanh AL låï n hån 10H thç nhaî y âãú n nhaî n THOI : CMP AL, 10H ; so saï nh AL våï i 10H JG THOI ; nhaí y âãú n THOI nãú u AL låï n hån 10H. JGE/JNL - Jump if Greater than or Equal/jump if not less than (Nhaí y nãú u låï n hån hoàû c bàò ng /Nhaí y nãú u khäng beï hån) Viãú t lãû nh :
Mä taí :
JG NHAN JNLE NHAN IP ← IP + Dëchchuyãø n.
Hai lãû nh trãn biãø u diãù n cuì ng mäü t thao taï c: nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u (SF⊕OF)=0. Quan hãû “låï n hån” (greater than) vaì “beï hån “ (less than) laì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n) cuí a 2 säú coï dáú u. Låï n hån coï nghéa laì dæång hån. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JGE/JNL. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì : Vê duû : Nãú u näü i dung thanh AL låï n hån hoàû c bàò ng 10 H thç nhaí y âãú n nhaî n THOI : CMP AL, 10H ; so saï nh AL våï i 10H JGE THOI ; nhaí y âãú n THOI nãú u AL låï n ; bàò ng 10H.
hån hoàû c
JL/JNGE - Jump if Less than/Jump if Not Greater than or Equal (Nhaí y nãú u beï /Nhaí y nãú u khäng låï n hån hoàû c bàò ng) Viãú t lãû nh :
JG NHAN JNGE NHAN
Trang : 29
Mä taí :
IP ← IP + Dëchchuyãø n.
Hai lãû nh trãn biãø u diãù n cuì ng mäü t thao taï c : nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u (SF⊕OF)=1. Quan hãû “låï n hån” (greater than) vaì “beï hån “ (less than) laì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n) cuí a 2 säú coï dáú u. Låï n hån coï nghéa laì dæång hån. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JL/JNGE. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì : Vê duû : Nãú u näü i dung thanh AL nhoí hån 10 H thç nhaí y âãú n nhaî n THOI : CMP AL, 10H ; so saï nh AL våï i 10H JL THOI ; nhaí y âãú n THOI nãú u AL nhoí
hån 10H.
JLE/JNG - Jump if Less than or Equal/Jump if Not Greater than (Nhaí y nãú u beï hån hoàû c bàò ng/Nhaí y nãú u khäng låï n hån) Viãú t lãû nh :
Mä taí :
JLE NHAN JNG NHAN IP ← IP + Dëchchuyãø n.
Hai lãû nh trãn biãø u diãù n cuì ng mäü t thao taï c : nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u (SF⊕OF)+2Z=1. Quan hãû “låï n hån” (greater than) vaì “beï hån “ (less than) laì caï c quan hãû daì nh cho viãû c so saï nh (do lãû nh CMP thæû c hiãû n) cuí a 2 säú coï dáú u. Låï n hån coï nghéa laì dæång hån. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JLE/JNG. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì : Vê duû : Nãú u näü i dung thanh AL khäng låï n hån 10H thç nhaí y âãú n nhaî n THOI :
Trang : 30
CMP AL, 10H ; so saï nh AL våï i 10H JL THOI ; nhaí y âãú n THOI nãú u AL khäng låï n hån ; 10H. JMP - Unconditinal Jump to specified Destination (Nhaí y (vä âiãö u kiãû n ) âãú n mäü t âêch naì o âoï ). Lãû nh naì y khiãú n cho bäü vi xæí lyï 8088 bàõ t âáö u thæû c hiãû n mäü t lãû nh måï i taû i âëa chè âæåü c mä taí trong lãû nh. Lãû nh naì y coï caï c chãú âäü âëa chè giäú ng nhæ lãû nh Call vaì noï cuî ng phán biãû t nhaí y xa vaì nhaí y gáö n. Tuyì thuäü c vaì o âäü daì i cuí a bæåï c nhaí y chuï nh ta phán biãû t 5 kiãø u lãû nh nhaí y khaï c nhau : 3 kiãø u nhaí y gáö n vaì 2 kiãø u nhaí y xa våï i âäü daì i lãû nh khaï c nhau (hçnh 3.8). Mäù i ä trãn caï c lãû nh tæång æï ng mäü t byte duì ng âãø ghi lãû nh. Nhæ váû y lãû nh nhaí y coï âäü daì i tæì 2 âãú n 5 byte. Viãú t lãû nh : sau âáy laì caï c daû ng lãû nh nhaí y khäng âiãö u kiãû n : JMP NHAN Lãû nh måï i bàõ t âáö u taû i âëa chè æï ng våï i nhaî n NHAN. Chæång trçnh dëch seî càn cæï vaì o khoaí ng dëch giæî a nhaî n vaì lãû nh nhaí y âãø xaï c âënh xem âoï laì : + nhaí y ngàõ n (short jump) æï ng våï i træåì ng håü p a) hçnh 3.8. Trong træåì ng håü p naì y nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng nhiãö u nháú t laì -128 .. + 127 byte so våï i lãû nh tiãú p theosau lãû nh JMP. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n måí räü ng dáú u cho noï . Sau âoï IP ← IP + Dëchchuyãø n Âáy laì lãû nh nhaí y tråü c tiãú p vç dëch chuyãø n âæåü c âãø træû c tiãú p trong maî lãû nh. Âãø âënh hæåï ng cho chæång trçnh dëch laì m viãû c nãn viãú t lãû nh dæåï i daû ng : JMP SHORT NHAN + nhaí y gáö n (near jump) æï ng våï i træåì ng håü p c) hçnh 3.8
Trang : 31
Trong træåì ng håü p naì y nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng nhiãö u nháú t laì -32768 .. + 32767 byte so våï i lãû nh tiãú p theosau lãû nh JMP. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n måí räü ng dáú u cho noï . Sau âoï IP ← IP + Dëchchuyãø n Âáy laì lãû nh nhaí y tråü c tiãú p vç dëch chuyãø n âæåü c âãø træû c tiãú p trong maî lãû nh. Âãø âënh hæåï ng cho chæång trçnh dëch laì m viãû c nãn viãú t lãû nh dæåï i daû ng : JMP NEAR NHAN + nhaí y xa (far jump) æï ng våï i træåì ng håü p d) hçnh 3.8. Trong træåì ng håü p naì y NHAN nàò m åí âoaû n maî khaï c so våï i lãû nh tiãú p theo sau lãû nh JMP. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë âëa chè nhaí y âãú n (CS:IP cuí a NHAN). Sau âoï Nhaí y ngàõ n : IP ← IP cuí a NHAN CS ← CS cuí a NHAN Âáy laì lãû nh nhaí y træû c tiãú p vç âëa chè nhaí y âãú n âæåü c âãø træû c tiãú p trong maî lãû nh. Âãø âënh hæåï ng cho chæång trçnh dëch laì m viãû c nãn viãú t lãû nh dæåï i daû ng : JMP FAR NHAN NHAN trong træåì ng håü p naì y phaí i âæåü c khai laì NHAN LABEL FAR JMP BX Âáy laì lãû nh nhaí y gáö n æï ng våï i træåì ng håü p b) hçnh 3.8, træåï c âoï BX phaí i chæï a âëa chè lãû ch cuí a lãû nh âënh nhaí y âãú n trong âoaû n CS. Khi thæû c hiãû n lãû nh naì y : IP ← BX
Trang : 32
Âáy cuî ng laì lãû nh nhaí y giaï n tiãú p vç âëa chè lãû ch nàò m trong thanh ghi. Âãø âënh hæåï ng cho chæång trçnh dëch laì m viãû c nãn viãú t lãû nh dæåï i daû ng : JMP NEAR PTR BX JMP [BX] Âáy laì lãû nh nhaí y gáö n æï ng våï i træåì ng håü p e) hçnh 3.8, IP måï i âæåü c láú y tæì näü i dung 2 ä nhåï do BX vaì BX+1 chè ra trong âoaû n DS (SI,DI coï thãø duì ng thay chäù cuí a BX). Âáy cuî ng laì lãû nh nhaí y giaï n tiãú p vç âëa chè lãû ch nàò m trong ä nhåï . Âãø âënh hæåï ng cho chæång trçnh dëch laì m viãû c nãn viãú t lãû nh dæåï i daû ng : JMP WORD PTR [BX] a)
Nhaí ytræû ctiãú p
8000H -128
Dëchchuyãø n8
Lãû nh hiãû n taû i
+ +127 Nhaí y gáö n : b)
c)
7FFFH Nhaí ygiaï ntiãú p
Mätaí thanhghi
Nhaí ytræû ctiãú p
Dëchchuyãø nLo
Dëchchuyãø nHi
Nhaí y xa : 0000H oooo h Âoaû n 64 Kbyte
d)
Nhaí ytræû ctiãú p
NHANIPLo
Nhaí ygiaï ntiãú p
Mätaí thanhghi
NHANIPHi
Hçnh 3.8. caï c kiãø u lãû nh nhaí y khäng âiãö u kiãû n (JUMP).
NHANCSLo
NHANCSHi
Trang : 33
Mäü t biãú n daû ng khaï c cuí a lãû nh trãn thu âæåü c khi ta viãú t lãû nh dæåï i daû ng : JMP DWORD PTR [BX] Âáy laì lãû nh nhaí y xa æï ng våï i træåì ng håü p e) hçnh 3.8. Âëa chè nhaí y âãú n æï ng våï i CS:IP. Giaï trë gaï n choIP vaì CS âæåü c chæï a trong 4 ä nhåï do BX vaì BX+1 (cho IP) vaì BX+2 vaì BX+3 (cho CS) chè ra trong âoaû n DS(SI,DI coï thãø duì ng thay chäù cuí a BX). Âáy cuî ng laì lãû nh nhaí y giaï n tiãú p vç âëa chè cå såí nàò m trong ä nhåï . Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . JNA - Xem JBE JNAE - Xem JB JNB - Xem JAE JNBE - Xem JA JNC - Xem JAE JNE/JNZ - jump if Not Equal/jump if Not Zero (nhaí y nãú u khäng bàò ng nhau/Nhaí y nãú u kãú t quaí khäng räù ng)
Viãú t lãû nh :
Mä taí :
JNE NHAN JNZ NHAN IP ← IP + Dëchchuyãø n.
Hai lãû nh trãn biãø u diãù n cuì ng mäü t thao taï c : nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u ZF=0. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JNE/JNZ. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u näü i dung thanh AL khaï c 10H thç nhaí y âãú n nhaî n THOI :
Trang : 34
CMP AL, 10H ; so saï nh AL våï i 10H JNE THOI ; nhaí y âãú n THOI nãú u AL khaï c 16. JNG - Xem JLE JNGE - Xem JL JNL - Xem JGE JNLE - Xem JG JNO - Jump if No Overflow (nhaí y nãú u khäng traì n) Viãú t lãû nh : Mä taí :
JNO NHAN IP ← IP + Dëchchuyãø n.
Âáy laì lãû nh nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u OF=0, tæï c khäng saí y ra sau khi thæû c hiãû n caï c pheï p toaï n våï i caï c säú coï dáú u. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JNO. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u sau pheï p cäü ng maì khäng coï traì n thç nhaí y âãú n nhaî n THOI : ADD AL, AH JNO THOI
; tênh täø ng 2 säú coï dáú u trong AL vaì AH ; nhaí y âãú n THOI nãú u khäng traì n.
JNP/JPO - Jump if No Parity/Jump if Parity Odd (nhaí y nãú u Parity leí ) Viãú t lãû nh :
Mä taí :
JNO NHAN JPO NHAN IP ← IP + Dëchchuyãø n.
Hai lãû nh trãn biãø u diãù n cuì ng mäü t thao taï c : nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u PF=0. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JNP/JPO. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n.
Trang : 35
Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u ta truyãö n âi mäü t kyï tæû våï i parity chàò n maì khi nháû n laû i âæåü c kyï tæû parity leí thç nhaí y âãú n nhaî n THOI : IN AL, 99H ; âoü c kyï tæû tæì cäø ng, OR AL,AL ; taû o cåì , JNP THOI ; nhaí y âãú n THOI nãú u parity leí . JNS - Jump if Not Signed (Jump if Positive) (nhaí y nãú u kãú t quaí dæång) Viãú t lãû nh : Mä taí :
JNS NHAN IP ← IP + Dëchchuyãø n.
Âáy laì lãû nh nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u SF=0, tæï c kãú t quaí laì dæång sau khi thæû c hiãû n caï c pheï p toaï n våï i caï c säú coï dáú u. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JNS. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u sau pheï p cäü ng maì kãú t quaí dæång thç nhaí y âãú n nhaî n THOI : ADD AL, AH ; tênh täø ng 2 säú coï dáú u trong AL vaì AH JNS THOI ; nhaí y âãú n THOI nãú u kãú t quaí dæång. JNZ - Xem JNE JO - Jump if Overflow (nhaí y nãú u traì n) Viãú t lãû nh : Mä taí :
JO NHAN IP ← IP + Dëchchuyãø n.
Trang : 36
Âáy laì lãû nh nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u OF=1, tæï c saí y ra traì n sau khi thæû c hiãû n caï c pheï p toaï n våï i caï c säú coï dáú u. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JO. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u sau pheï p cäü ng maì coï traì n thç nhaí y âãú n nhaî n THOI : ADD AL, AH JO THOI
; tênh täø ng 2 säú coï dáú u trong AL vaì AH ; nhaí y âãú n THOI nãú u coï traì n.
JP/JPE - Jump if Parity/jump if Parity Even (nhaí y nãú u parity chàô n) Viãú t lãû nh :
Mä taí :
JP NHAN JPE NHAN IP ← IP + Dëchchuyãø n.
Hai lãû nh trãn biãø u diãù n cuì ng mäü t thao taï c : nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u PF=1. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JP/JPE. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u ta truyãö n âi mäü t kyï tæû våï i parity leí maì khi nháû n laû i âæåü c mäü t kyï tæû parity chàô n thç nhaí y âãú n nhaî n THOI : IN AL, 99H ; âoü c kyï tæû tæì cäø ng, OR AL,AL ; taû o cåì , JP THOI ; nhaí y âãú n THOI nãú u parity chàô n. JPE - Xem JP JPO - Xem JNP JS - Jump if Signed (Jump if Negative) (nhaí y nãú u kãú t quaí ám)
Trang : 37
Viãú t lãû nh : Mä taí :
JS NHAN IP ← IP + Dëchchuyãø n.
Âáy laì lãû nh nhaí y (coï âiãö u kiãû n) tåï i NHAN nãú u SF=1, tæï c kãú t quaí laì ám sau khi thæû c hiãû n caï c pheï p toaï n våï i caï c säú coï dáú u. Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) - 128 .. + 127 byte so våï i lãû nh tiãú p theo sau lãû nh JS. Chæång trçnh dëch seî càn cæï vaì o vë trê NHAN âãø xaï c âënh giaï trë dëch chuyãø n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : Nãú u sau pheï p cäü ng maì kãú t quaí ám thç nhaí y âãú n nhaî n THOI : ADD AL, AH ; tênh täø ng 2 säú coï dáú u trong AL vaì AH JS THOI ; nhaí y âãú n THOI nãú u kãú t quaí ám. JZ - Xem JE LAHF - Load AH with the low byte of the Flag register (Naû p byte tháú p cuí a thanh cåì vaì o AH) Mä taí :
AH ← FRL
Duì ng lãû nh naì y phäú i håü p våï i lãû nh PUSH AX thç coï thãø mä phoí ng lãû nh PUSH PSW cuí a bäü vi xæí lyï 8085 trãn 8088 (lãû nh PUSH PSW cuí a vi xuí lyï 8085 cáú t thanh ghi cåì vaì Acc cuí a noï vaì o ngàn xãú p). Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . LDS - Load Register and DS with Words from Memory (Naû p mäü t tæì (tæì bäü nhåï ) vaì o thanh ghi cho trong lãû nh vaì mäü t tæì tiãú p theo vaì o DS) Viãú t lãû nh : Trong âoï :
LDS Âêch,Gäú c
Trang : 38
+ Âêch laì mäü t trong caï c thanh ghi : AX, BX, CX, DX, SP, BP, SI, DI. + Gäú c laì ä nhåï trong âoaû n DS âæåü c chè roî trong lãû nh. Mä taí :
Âêch ← Gäú c, DS ← Gäú c + 2.
Âáy laì lãû nh âãø naû p vaì o thanh ghi âaî choü n vaì vaì o DS tæì 4 ä nhåï liãn tiãú p Mäü t trong nhæî ng æï ng duû ng cuí a lãû nh naì y laì laì m sao cho SP vaì DS chè vaì o âëa chè âáö u cuí a vuì ng nhåï chæï a chuäù i gäú c træåï c khi duì ng âãú n lãû nh thao taï c chuäù i. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : LDS SI,STR_PTR Thê duû trãn naû p vaì o SI näü i dung 2 ä nhåï STR_PTR vaì STR_PTR+1 vaì naû p vaì p DS näü i dung 2 ä nhåï STR_PTR+2 vaì STR_PTR+3. Caï c ä nhåï naì y âãö u nàò m trong âoaû n dæî liãû u DS vaì chæï a âëa chè cuí a chuäù i gäú c. Do váû y sau âoï DS:SI chè vaì o âáö u chuäù i gäú c cáö n thao taï c. LEA - Load Effective Address (Naû p âëa chè hiãû u duû ng vaì o thanh ghi) Viãú t lãû nh :
LEA Âêch,Gäú c
Trong âoï : + Âêch thæåì ng laì mäü t trong caï c thanh ghi : BX, CX, DX, BP, SI, DI. + Gäú c laì tãn biãú n trong âoaû n DS âæåü c chè roî trong lãû nh hoàû c ä nhåï cuû thãø . Mä taí :
Âêch ← Âëa chè lãû ch cuí a Gäú c, hoàû c Âêch ← Âëa chè hiãû u duû ng cuí a Gäú c
Âáy laì lãû nh âãø tênh âëa chè lãû ch cuí a biãú n hoàû c âëa chè cuí a ä nhåï choü n laì m gäú c räö i naû p vaì o thanh ghi âaî choü n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì .
Trang : 39
Vê duû : LEA DX, MSG
; ; LEA CX, [BX] [DI] ; ;
naû p âëa chè lãû ch cuí a baí n tin MSG vaì o DX. naû p vaì o CX âëa chè hiãû u duû ng do BX vaì DI chè ra : EA =BX+DI
LES - Load Register and ES with Words from Memory (Naû p mäü t tæì (tæì bäü nhåï ) vaì o thanh ghi cho trong lãû nh vaì mäü t tæì tiãú p theo vaì o ES) Viãú t lãû nh :
LES Âêch,Gäú c
Trong âoï : + Âêch laì mäü t trong caï c thanh ghi : AX, BX, CX, DX, SP, BP, SI, DI. + Gäú c laì ä nhåï trong âoaû n DS âæåü c chè roî trong lãû nh. Mä taí :
Âêch ← Gäú c, ES ← Gäú c + 2.
Âáy laì lãû nh âãø naû p vaì o thanh ghi âaî choü n vaì vaì o ES tæì 4 ä nhåï liãn tiãú p Mäü t trong nhæî ng æï ng duû ng cuí a lãû nh naì y laì laì m sao cho DI vaì ES chè vaì o âëa chè âáö u cuí a vuì ng nhåï chæï a chuäù i gäú c træåï c khi duì ng âãú n lãû nh thao taï c chuäù i. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : LES DI,[BX] Thê duû trãn naû p vaì o DI näü i dung 2 ä nhåï BX vaì BX+1 vaì naû p vaì p ES näü i dung 2 ä nhåï BX+2 vaì BX+3. Caï c ä nhåï naì y âãö u nàò m trong âoaû n dæî liãû u DS vaì chæï a âëa chè cuí a chuäù i gäú c. Do váû y sau âoï ES:DI chè vaì o âáö u chuäù i gäú c cáö n thao taï c. LOCK - Assert Bus Lock signal (Âæa ra tên hiãû u khoaï bus) Lãû nh LOCK duì ng âàû t træåï c caï c lãû nh maì khi chaû y noï coï nguy cå gáy läù i do khaí nàng xaí y ra tranh cháú p trong viãû c sæí duû ng bus giæî a bäü vi xæí lyï 8088 vaì caï c bäü xæí lyï khaï c trong hãû thäú ng âa xæí lyï . Nãú u coï lãû nh LOCK âàû t træåï c mäü t lãû nh naì o âoï , thç khi chaû y lãû nh naì y, 8088 âæa ra tên hiãû u khoaï bus.
Trang : 40
Tên hiãû u naì y seî näú i ra thiãú t bë âiãö u khiãø n bus ngoaì i âãø cáú m caï c bäü xæí lyï khaï c trong hãû thäú ng sæí duû ng bus. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû :
LOCK XCHG AL,Kytu
Lãû nh XCHG cáö n 2 láö n thám nháû p bus âãø hoaì n táú t viãû c thæû c hiãû n lãû nh, do âoï cáö n âàû t sau LOCK âãø traï nh nguy cå tranh cháú p bus coï thãø xaí y ra trong hãû thäú ng âa xæí lyï . LODS/LODSB/LODSW - Load string Byte/Word into AL/AX (Naû p vaì o AL/AX 1 pháö n tæí cuí a chuoié byte/tæì ) Viãú t lãû nh :
LODS Chuäù igäú c LODSB LODSW
Mä taí : AL ← pháö ntæí hiãû nthåì i, SI ← Si ± 1 tuyì theo DF, nãú u laì chuäù i byte. AL ← pháö ntæí hiãû nthåì i, SI ← Si ± 2 tuyì theo DF, nãú u laì chuäù i tæì . (pháö ntæí hiãû nthåì i cuí a chuäù i laì do DS:SI hiãû n thåì i chè ra) Lãû nh LODS naû p vaì o AL/AX 1 byte/tæì (1 pháö n tæí cuí a chuuoé âaî âæåü c âënh nghéa træåï c laì chuäù i gäö m caï c byte hoàû c tæì ) do SI chè ra trogn âoaû n DS, sau âoï SI tæû âäü ng tàng/giaí m âãø chè vaì o pháö n tæí tiãú p theo tuyì theo cåì hæåï ng. Khi phaí i dëch lãû nh LODS Chuäù igäú c, chæång trçnh dëch duì ng tãn Chuäù igäú c âãø xaï c âënh xem luï c khai baï o thç Chuäù igäú c coï caï c pháö n tæí laì byte hay tæì . Muäú n chè roî cho chæång trçnh dëch håü p ngæî ràò ng ta laì m viãû c våï i chuäù i caï c byte hoàû c caï c tæì , ta cuî ng coï thãø duì ng lãû nh LODSB hoàû c LODSW. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì .
Vê duû :
Trang : 41
CLD LEA SI, STRI LODS STRI
; ; ; ;
laì m viãû c våï i chuäù i theo chiãö u → SI chè vaì o âáö u chuäù i STRI âãø taû i âoaû n dæî liãû u DS naû p vaì o Acc 1 pháö n tæí .
LOOP - Jump to Sspecified Label if CX≠0 after Autodecrement (làû p laû i âoaû n chæång trçnh do nhaî n chè ra cho âãú n khi CX=0) Viãú t lãû nh :
LOOP NHAN
Lãû nh naì y duì ng âãø làû p laû i âoaû n chæång trçnh (gäö m caï c lãû nh nàò m trong khoaí ng tæì nhaî n NHAN âãú n hãú t lãû nh LOOP NHAN) cho âãú n khi säú láö n làû p CX=0. âiãö u naì y coï nghéa laì træåï c khi vaì o voì ng làû p ta phaí i âæa säú láö n làû p mong muäú n vaì o thanh ghi CX vaì sau mäù i láö n thæû c hiãû n lãû nh LOOP NHAN thç âäö ng thåì i CX tæû âäü ng giaí m âi mäü t (CX ←CX-1). Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) -128 byte so våï i lãû nh tiãú p theo sau lãû nh LOOP. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : XOR AL, AL MOV CX,16 LAP: INC AL LOOP LAP
; ; ; ;
xoaï AL säú láö n làû p âãø taû i CX tàng AL thãm 1 làû p laû i 16 láö n, AL = 16
LOOPE/LOOPZ - Loop While CX≠0 and ZF=1 (Làû p laû i âoaû n chæång trçnh do nhaî n chè ra cho âãú n khi CX=0 hoàû c ZF=0) Viãú t lãû nh :
LOOPE NHAN LOOPZ NHAN
Mä taí : Lãû nh naì y duì ng âãø làû p laû i âoaû n chæång trçnh (gäö m caï c lãû nh nàò m trong khoaí ng tæì nhaî n NHAN âãú n hãú t lãû nh LOOPE NHAN hoàû c LOOPZ NHAN) cho âãú n khi säú láö n làû p CX=0 hoàû c ZF=0. Âiãö u naì y coï nghéa laì træåï c khi vaì o voì ng làû p ta phaí i âæa säú láö n làû p mong muäú n vaì o thanh ghi CX vaì sau mäù i
Trang : 42
láö n thæû c hiãû n lãû nh LOOP NHAN thç âäö ng thåì i CX tæû âäü ng giaí m âi 1 (CX ←CX-1). Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) -128 byte so våï i lãû nh tiãú p theo sau lãû nh LOOPE/ LOOPZ. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : MOV AL, AH MOV CX,100 LAP: INC AL CMP AL,16 LOOP LAP
; ; ; ; ; ;
AL âæåü c gaï n giaï trë cuí a AH âãø âãú m säú láö n làû p tàng AL thãm 1 AL=16 ? làû p laû i cho âãú n khi AL≠16 hoàû c âãú m xong.
LOOPNE/LOOPNZ - Loop While CX≠0 and ZF=0(làû p laû i âoaû n chæång trçnh do nhaî n chè ra cho âãú n khi CX=0 hoàû c ZF=1) Viãú t lãû nh :
LOOPE NHAN LOOPZ NHAN
Mä taí : Lãû nh naì y duì ng âãø làû p laû i âoaû n chæång trçnh (gäö m caï c lãû nh nàò m trong khoaí ng tæì nhaî n NHAN âãú n hãú t lãû nh LOOPNE NHAN hoàû c LOOPNZ NHAN) cho âãú n khi säú láö n làû p CX=0 hoàû c ZF=1. Âiãö u naì y coï nghéa laì træåï c khi vaì o voì ng làû p ta phaí i âæa säú láö n làû p mong muäú n vaì o thanh ghi CX vaì sau mäù i láö n thæû c hiãû n lãû nh LOOP NHAN thç âäö ng thåì i CX tæû âäü ng giaí m âi 1 (CX ←CX-1). Nhaî n NHAN phaí i nàò m caï ch xa (dëch âi mäü t khoaí ng) -128 byte so våï i lãû nh tiãú p theo sau lãû nh LOOPNE/ LOOPNZ. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : MOV AL, AH MOV CX,100
; AL âæåü c gaï n giaï trë cuí a AH ; âãø âãú m säú láö n làû p
Trang : 43
LAP: INC AL CMP AL,16 LOOP LAP
; ; ; ;
tàng AL thãm 1 AL=16 ? làû p laû i cho âãú n khi AL=16 hoàû c âãú m xong.
LOOPNZ - Xem LOOPNE LOOPZ - Xem LOOPE MOV - Move a Word or byte (Chuyãø n 1 tæì hay 1 byte) Viãú t lãû nh :
MOV Âêch,Gäú c.
Mä taí :
Âêch ← Gäú c
Trong âoï toaï n haû ng âêch vaì gäú c coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau, nhæng phaí i coï cuì ng âäü daì i vaì khäng âæåü c pheï p âäö ng thåì i laì 2 ä nhåï hoàû c 2 thanh ghi âoaû n. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : MOV AL, 74H MOV CL,BL MOV DL,[SI] MOV AL,Table [BX]
; ; ; ;
AL ← 74 CL ← BL DL ← {DS:SI} AL ←{DS:(Table+BX)}
MOVS/MOVSB/MOVSW - Move String Byte or String Word (Chuyãø n 1 pháö n tæí cuí a 1 chuäù i sang mäü t chuäù i khaï c) Viãú t lãû nh :
MOVS Chuäù iâêch,Chuäù igäú c MOVSB MOVSW
Mä taí :
Pháö ntæí Chuäù iâêch ← Pháö ntæí Chuäù igäú c
Lãû nh naì y duì ng chuyãø n tæì ng byte hay tæì ng tæì cuí a chuäù i gäú c sang chuäù i âêch,
Trang : 44
trong âoï : + DS:SI laì âëa chè cuí a pháö n tæí trong chuäù i gäú c. + ES:DI laì âëa chè cuí a pháö n tæí trong chuäù i âêch. + Sau mäù i láö n chuyãø n SI ← SI ± 1, DI ← DI ± 1 hoàû c SI ← SI ± 2, DI ← DI ± 2 mäü t caï ch tæû âäü ng tuyì thuäü c cåì hæåï ng DF laì 0/1 vaì chuäù i laì chuäù i byte hoàû c chuäù i tæì . Coï hai caï ch âãø chè ra chuäù i laì chuäù i byte hay laì chuäù i tæì . Caï ch âáö u tiãn laì ta khai roî bàò ng tãn chuäù i nguäö n vaì chuäù i âêch laì loaû i gç ngay tæì âáö u chæång trçnh. Caï ch thæï hai laì ta thãm vaì o lãû nh MOVS âuäi “B” cho chuäù i byte hoàû c âuäi “W” cho chuäù i tæì . (xem mä taí caï ch sæí duû ng taû i lãû nh COMPS). Lãû nh MOVS/MOVSB/MOVSW coï thãø duì ng keì m våï i lãû nh REPE hoàû c REPNE âãø so saï nh táú t caí caï c pháö n tæí trong chuäù i. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : MOV DI, OFFSET Chuäù iâêch ; láú y âëa chè lãû ch ; cuí a chuäù iâêch taû i ; ES vaì o DI MOV SI, OFFSET Chuäù igäú c ; láú y âëa chè lãû ch ; cuí a chuäù igäú c taû i DS ; vaì o SI CLD ; laì m viãû c våï i chuäù i ; theo chiãö u → MOVSB ; chuyãø n 1 byte . SI ; vaì DI tàng thãm 1. MUL - Multiply Unisigned Byte or Word (nhán säú khäng dáú u) Viãú t lãû nh :
MUL Gäú c
Trong âoï toaï n haû ng Gäú c laì säú nhán vaì coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau.
Trang : 45
Mä taí : tuyì theo âäü daì i cuí a toaï n haû ng Gäú c ta coï 2 træåì ng håü p täø chæï c pheï p nhán, chäù âãø ngáö m âënh cho säú bë nhán vaì kãú t quaí : • nãú u Gäú c laì säú 8 bit : AL × Gäú c, säú bë nhán phaí i laì säú 8 bit âãø trong AL. sau khi nhán : AX ← têch, • nãú u Gäú c laì säú 16 bit : AX × Gäú c, säú bë nhán phaí i laì säú 16 bit âãø trong AX. sau khi nhán : DXAX ← têch. Nãú u byte cao (hoàû c 16 bit cao) cuí a 16 (hoàû c 32) bit kãú t quaí chæï a 0 thç CF=OF=0 Nhæ váû y caï c cåì CF vaì OF seî baï o cho ta biãú t coï thãø boí âi bao nhiãu säú 0 trong kãú t quaí . Vê duû : Nãú u ta cáö n nhán mäü t säú 8 bit våï i mäü t säú 16 bit , ta âãø säú 16 bit taû i Gäú c vaì säú 8 bit åí AL. Säú 8 bit naì y åí AL cáö n phaí i âæåü c måí räü ng sang AH bàò ng caï ch gaï n AH=0 âãø laì m cho säú bë nhán nàò m trong AX. Sau cuì ng chè viãû c duì ng lãû nh MUL Gäú c vaì kãú t qur coï trong càû p DXAX. Cáû p nháû t : CF, OF. Khäng xaï c âënh : AF, PF, SF, ZP. NEG - Negate a Operand (Form its 2’s Complement) (láú y buì hai cuí a mäü t toaï n haû ng, âäø i dáú u cuí a mäü t toaï n haû ng) Viãú t lãû nh :
NEG Âêch
Trong âoï toaï n haû ng Âêch coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau. Mä taí :
Âêch ← 0 - (Âêch)
Âiãö u naì y hoaì n toaì n tæång âæång våï i viãû c láú y (Âêch + 1) laì m kãú t quaí . Nãú u ta láú y buì 2 cuí a -128 hoàû c -32768 thç ta seî âæåü c kãú t quaí khäng âäø i nhæng cåì OF=1 âãø baï o laì kãú t quaí bë traì n (vç säú dæång låï n nháú t biãø u diãù n âæåü c laì + 127 vaì + 32767).
Trang : 46
Cáû p nháû t : AF, CF, OF, PF, SF, ZF. Vê duû : NEG AH ; AH ← 0 -(AH) NEG BYTE PTR [BX] ; láú y buì hai cuí a ä nhåï âoï ; BX chè ra trong DS NOP - No Operation ( CPU khäng laì m gç) Lãû nh naì y khäng thæû c hiãû n cäng viãû c gç ngoaû i træì viãû c tàng näü i dung cuí a IP vaì tiãu täú n 3 chu kyì âäö ng häö . Noï thæåì ng âæåü c duì ng âãø tênh thåì i gian trong caï c voì ng trãù hoàû c âãø chiãú m chäù cho caï c lãû nh cáö n thãm vaì o chæång trçnh sau naì y maì khäng laì m aí nh hæåí ng âãú n âäü daì i cuí a chæång trçnh. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . NOT - Invert Each Bit of an Operand (Form its 1’s complement) (láú y buì cuí a mäü t toaï n haû ng, âaí o bit cuí a mäü t toaï n haû ng). Viãú t lãû nh :
NOT Âêch
Trong âoï toaï n haû ng Âêch coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau. Mä taí :
Âêch ← (Âêch)
Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : NOT AH ; AH ← (AH) NOT BYTE PTR [BX] ; láú y buì 1 cuí a ä nhåï âoï ; BX chè ra trong DS OR - Logically Or Corresponding Bits of Two Operands (hoàû c hai toaï n haû ng)
Trang : 47
Viãú t lãû nh :
OR Âêch,Gäú c
Mä taí :
Âêch ← Âêch v Gäú c
Trong âoï toaï n haû ng âêch vaì gäú c coï thãø tçm âæåü c theo caï c âëa chè khaï c nhau, nhæng phaí i chæï a dæî liãû u cuì ng âäü daì i vaì khäng âæåü c pheï p âäö ng thåì i laì 2 ä nhåï vaì cuî ng khäng âæåü c laì thanh ghi âoaû n. Pheï p OR thæåì ng duì ng âãø láû p mäü t vaì i bit naì o âoï cuí a toaï n haû ng bàò ng caï ch cäü ng loogic toaï n haû ng âoï våï i toaï n haû ng tæï c thåì i coï caï c bit 1 taû i caï c vë trê tæång æï ng cáö n thiãú t láû p. Xoï a : CF,OF. Cáû p nháû t : PF, SF, ZP,PF. Chè coï nghéa khi toaï n haû ng laì 8 bit. Khäng xaï c âënh : AF. Vê duû : OR AL, BL OR BL, 30H
; AL ← AL v BL theo tæì ng bit ; láû p bit b4 vaì b5 cuí a BL lãn 1.
OUT - Output a Byte or a Word toa Port (âæa dæî liãû u tæì Acc ra cäø ng) Viãú t lãû nh :
OUT Port,Acc
Mä taí :
Acc → {port}
Trong âoï {port}laì dæî liãû u cuí a cäø ng coï âëa chè laì Port. Port laì âëa chè 8 bit cuí a cäø ng, noï coï thãø coï caï c giaï trë trong khoaí ng 00H ... FFH . Nhæ váû y ta coï thãø coï caï c khaí nàng sau : + Nãú u Acc laì AL thç dæî liãû u 8 bit âæåü c âæa ra cäø ng port. + Nãú u Acc laì AX thç dæî liãû u 16 bit âæåü c âæa ra cäø ng port vaì cäø ng port +1. Coï mäü t caï ch khaï c âãø biãø u diãù n âëa chè cäø ng laì thäng qua thanh ghi DX. Khi duì ng thanh ghi DX âãø chæï a âëa chè cäø ng ta seî coï khaí nàng âëa chè hoaï cäø ng mãö m deí o hån. Luï c naì y âëa chè cäø ng nàò m trong daí i 0000H ...FFFFH vaì ta phaí i viãú t lãû nh theo daû ng :
Trang : 48
OUT DX, Acc Trong âoï DX phaí i âæåü c gaï n tæì træåï c giaï trë æï ng våï i âëa chè cäø ng. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . POP - Pop Word from Top of Stack (láú y laû i 1 tæì vaì o thanh ghi tæì âènh ngàn xãú p) Viãú t lãû nh : Mä taí :
POP Âêch Âêch ← {SP}, SP ← SP +2.
Trong âoï toaï n haû ng âêch coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau : coï thãø laì caï c thanh ghi âa nàng, thanh ghi âoaû n (nhæng khäng âæåü c laì thanh ghi âoaû n maî CS) hoàû c ä nhåï . Dæî liãû u âãø taû i ngàn xãú p khäng thay âäø i. Giaï trë cuí a SS khäng thaí y âäø i. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : POP DX POP Table[BX]
; ; ; ; ;
láú y 2 byte tæì âènh ngàn xãú p âæa vaì o DX. láú y 2 byte tæì âènh ngàn xãú p räö i âãø taû i vuì ng DX coï âëa chè âáö u taû i (Table + BX)
POPF - Pop Word from Top of Stack to flag Register (láú y mäü t tæì tæì âènh ngàn xãú p räö i âæa vaì o thanh cåì ) Viãú t lãû nh : Mä taí :
POPF RF ← {SP}, SP ← SP +2.
Sau lãû nh naì y dæî liãû u âãø taû i ngàn xãú p khäng thay âäø i. SS khäng thay âäø i. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì .
Trang : 49
PUSH - Push Word on the Stack (cáú t 1 tæì vaì o ngàn xãú p)
Viãú t lãû nh :
POPF Gäú c
Mä taí :
SP ← SP - 2. Gäú c ← {SP}.
Trong âoï toaï n haû ng gäú c coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau : coï thãø laì caï c thanh ghi âa nàng, thanh ghi âoaû n hoàû c ä nhåï . Lãû nh naì y thæåì ng duì ng våï i lãû nh POP nhæ laì mäü t càû p âäú i ngáù u âãø xæí lyï caï c dæî liãû u vaì traû ng thaï i cuí a chæång trçnh chênh (CTC) khi vaì o/ra chæång trçnh con (ctc). Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì .
Vê duû : PUSH BX PUSH Table[BX]
; cáú t BX vaì o ngàn xãú p taû i vë trê Trisdo SP chè ra. ; cáú t 2 byte cuí a vuì ng dæî liãû u DS ; coï âëa chè âáö u taû i (Table + BX).
PUSHF - Push Flag register to the Stack (cáú t thanh cåì vaì o ngàn xãú p) Viãú t lãû nh :
POPF Gäú c
Mä taí :
SP ← SP - 2. RF ← {SP}.
Dæî liãû u âãø taû i ngàn xãú p khäng thay âäø i. SS khäng thay âäø i. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . RCL - Rotate through CF to the left (Quay traï i thäng qua cåì nhåï )
Trang : 50
Viãú t lãû nh :
RCL Âêch,CL
Trong âoï toaï n haû ng âêch coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau. Mä taí : CF
MSB
LSB
Hçnh 3.9. Lãû nh RLC Lãû nh naì y duì ng âãø quay toaï n haû ng sang traï i thäng qua cåì CF. CL phaí i âæåü c chæï a sàô n säú láö n quay mong muäú n. Trong træåì ng håü p quay mäü t láö n coï thãø viãú t træû c tiãú p : RCL Âêch,1 (tæì caï c bäü vi xæí lyï thãú hãû sau nhæ 80186, 80286 ... thç coï thãø viãú t træû c tiãú p kiãø u naì y våï i säú láö n quay låï n nháú t laì 32). Ta nháû n tháú y säú láö n cuí a quay laì 9 thç kãú t quaí khäng thay âäø i vç càû p CF vaì toaï n haû ng quay troì n âuï ng mäü t voì ng. Taï c âäü ng vaì o cåì : chè coï CF vaì OF bë aí nh hæåí ng. Sau lãû nh RCL cåì CF mang giaï trë cuî cuí a MSB, coì n cåì OF ← 1 nãú u sau khi quay mäü t láö n maì bit MSB bë thay âäø i so våï i træåï c khi quay. Cåì OF seî khäng âæåü c xaï c âënh sau nhiãö u láö n quay. Vê duû : RCL BX,1 MOV CL,8 RCL AL, CL
; ; ; ; ; ;
quay traï i thanh ghi BX thäng qua CF säú láö n quay âãø trong CL, quay traï i thanh ghi AL 8 láö n thäng qua CF. MSB luï c naì y chæï a giaï trë CF ban âáö u.
Trang : 51
RCR - Rotate though CF to the right (quay phaí i thäng qua cåì nhåï ) Viãú t lãû nh :
RCR Âêch,CL
Trong âoï toaï n haû ng âêch coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau. Mä taí : CF
MSB
LSB
Hçnh 3.10. Lãû nh RCR. Lãû nh naì y duì ng âãø quay toaï n haû ng sang traï i thäng qua cåì CF. CL phaí i âæåü c chæï a sàô n säú láö n quay mong muäú n. Trong træåì ng håü p quay mäü t láö n coï thãø viãú t træû c tiãú p : RCR Âêch,1 (tæì caï c bäü vi xæí lyï thãú hãû sau nhæ 80186, 80286 ... thç coï thãø viãú t træû c tiãú p kiãø u naì y våï i säú láö n quay låï n nháú t laì 32). Ta nháû n tháú y säú láö n cuí a quay laì 9 thç kãú t quaí khäng thay âäø i vç càû p CF vaì toaï n haû ng - thanh ghi quay troì n âuï ng mäü t voì ng. Taï c âäü ng vaì o cåì : chè coï CF vaì OF bë aí nh hæåí ng. Sau lãû nh RCR cåì CF mang giaï trë cuî cuí a LSB, coì n cåì OF ← 1 nãú u sau khi quay mäü t láö n maì bit MSB bë thay âäø i so våï i træåï c khi quay. Cåì ì OF seî khäng âæåü c xaï c âënh sau nhiãö u láö n quay. Vê duû : RCR BX,1 MOV CL,8 RCR AL, CL
; quay phaí i thanh ghi BX thäng qua CF ; säú láö n quay âãø trong CL, ; quay phaí i thanh ghi AL 8 láö n thäng
Trang : 52
; qua CF. LSB luï c naì y chæï a giaï trë ; CF ban âáö u. REP - Repeat String Instruction until CX=0 (làû p laû i lãû nh viãú t sau âoï cho tåï i khi CX=0). Âáy laì tiãú p âáö u ngæî duì ng âãø viãú t træåï c caï c lãû nh thao taï c våï i chuäù i dæî liãû u maì ta muäú n làû p laû i mäü t säú láö n. Säú láö n làû p phaí i âãø træåï c trong CX. Khi caï c lãû nh naì y âæåü c làû p laû i thç CX tæû âäü ng giaí m âi mäü t sau mäù i láö n làû p. Quaï trçnh seî kãú t thuï c khi CX =0. Vê duû : REP MOVSB
; làû p laû i lãû nh chuyãø n byte cuí a ; chuäù i tåï i khi CX=0
REPE/REPZ - Repeat String Instruction until CX=0 or ZF=0 (làû p laû i lãû nh viãú t sau âoï cho tåï i khi CX=0 hoàû c ZF=0). Âáy laì tiãú p âáö u ngæî duì ng âãø viãú t træåï c caï c lãû nh thao taï c våï i chuäù i dæî liãû u maì ta muäú n làû p laû i mäü t säú láö n. Säú láö n làû p phaí i âãø træåï c trong CX. Khi caï c lãû nh naì y âæåü c làû p laû i thç CX tæû âäü ng giaí m âi mäü t sau mäù i láö n làû p. Khi duì ng REPE/REPZ våï i lãû nh so saï nh chuäù i, quaï trçnh seî kãú t thuï c khi âãú m hãú t (CX=0) hoàû c khi hai pháö n tæí so saï nh khaï c nhau (ZF=0). Vê duû : REPE CMPSB
; làû p laû i lãû nh so saï nh caï c ; byte cuí a 2 chuäù i tåï i khi CX=0 ; hoàû c ZF=0.
REPNE/REPNZ - Repeat String Instruction until CX=0 or ZF=1 (làû p laû i lãû nh viãú t sau âoï cho tåï i khi CX=0 hoàû c ZF=1). Âáy laì tiãú p âáö u ngæî duì ng âãø viãú t træåï c caï c lãû nh thao taï c våï i chuäù i dæî liãû u maì ta muäú n làû p laû i mäü t säú láö n. Säú láö n làû p phaí i âãø træåï c trong CX. Khi caï c lãû nh naì y âæåü c làû p laû i thç CX tæû âäü ng giaí m âi mäü t sau mäù i láö n làû p. Khi
Trang : 53
duì ng REPNE/REPNZ våï i lãû nh queï t chuäù i, quaï trçnh seî kãú t thuï c khi âãú m hãú t (CX=0) hoàû c khi Acc bàò ng pháö n tæí cuí a chuäù i (ZF=1).
Vê duû : REPNE CMPSB
; ; ; ;
làû p laû i lãû nh queï t caï c byte cuí a chuäù i tåï i khi hãú t chuäù i (CX=0) hoàû c Al bàò ng 1 pháö n tæí cuí a chuäù i (ZF=1).
RET - Return reom Procedure to Calling Program (Tråí vãö CTC tæì ctc) Viãú t lãû nh :
RET hoàû c RET n,n laì säú nguyãn dæång.
Mä taí : RET âæåü c âàû t taû i cuäú i ctc âãø bäü vi xæí lyï láú y laû i âëa chè tråí vãö (âëa chè cuí a lãû nh tiãú p theo lãû nh goü i cuí a CTC), noï âæåü c tæû âäü ng cáú t åí ngàn xãú p khi coï lãû nh goü i ctc. Tuyì theo loaû i gáö n hay xa ta cuî ng seî caï c xæí lyï khaï c nhau âäú i våï i âëa chè tråí vãö (xem thãm pháö n mä ta chung våï i lãû nh Call). Âàû c biãû t nãú u ta duì ng RET n thç sau khi âaî láú y laû i âæåü c âëa chè tråí vãö (chè coï IP hoàû c coï CS vaì IP) thç SP ← SP + n (duì ng âãø nhaí y qua maì khäng láú y laû i caï c thäng säú khaï c cuí a chæång trçnh coì n laû i trong ngàn xãú p). Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . ROL - Rotate All Bits to the Left (Quay voì ng sang traï i) Viãú t lãû nh :
RCR Âêch,CL
Trong âoï toaï n haû ng âêch coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau. Mä taí :
Trang : 54
CF
MSB
LSB
Hçnh 3.11. Lãû nh ROL. Lãû nh naì y duì ng âãø quay voì ng toaï n haû ng sang traï i, MSB seî âæåü c âæa qua cåì CF vaì LSB. CL phaí i âæåü c chæï a sàô n säú láö n quay mong muäú n. Trong træåì ng håü p quay mäü t láö n coï thãø viãú t træû c tiãú p : ROL Âêch,1 (tæì caï c bäü vi xæí lyï thãú hãû sau nhæ 80186, 80286 ... thç coï thãø viãú t træû c tiãú p kiãø u naì y våï i säú láö n quay låï n nháú t laì 32). Ta nháû n tháú y nãú u CL=8 vaì toaï n haû ng âãø quay laì 8 bit thç kãú t quaí khäng bë thay âäø i vç toaï n haû ng quay troì n âuï ng mäü t voì ng, coì n nãú u CL=4 thç 2 nibble cuí a toaï n haû ng bë âäø i chäù . Taï c âäü ng vaì o cåì : chè coï CF vaì OF bë aí nh hæåí ng. Sau lãû nh ROL cåì CF mang giaï trë cuî cuí a MSB, coì n cåì OF ← 1 nãú u sau khi quay mäü t láö n maì bit MSB bë thay âäø i so våï i træåï c khi quay. Cåì ì CF tæì giaï trë cuí a MSB laì m âiãö u kiãû n cho caï c lãû nh nhaí y coï âiãö u kiãû n. Vê duû : ROL BX,1 MOV CL,8 ROL AL, CL
; ; ; ; ;
quay voì ng sang traï i thanh ghi BX säú láö n quay âãø trong CL, quay voì ng qua traï i thanh ghi AL 8 láö n thanh ghi AL luï c naì y chæï a giaï trë ban âáö u (træåï c khi quay).
ROR - Rotate All Bits to the right (Quay voì ng sang phaí i)
Viãú t lãû nh :
ROR Âêch,CL
Trong âoï toaï n haû ng âêch coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau.
Trang : 55
Mä taí : MSB
LSB
CF
Hçnh 3.12. Lãû nh ROR. Lãû nh naì y duì ng âãø quay voì ng toaï n haû ng sang phaí i, LSB seî âæåü c âæa qua cåì CF vaì MSB. CL phaí i âæåü c chæï a sàô n säú láö n quay mong muäú n. Trong træåì ng håü p quay mäü t láö n coï thãø viãú t træû c tiãú p : ROR Âêch,1 (tæì caï c bäü vi xæí lyï thãú hãû sau nhæ 80186, 80286 ... thç coï thãø viãú t træû c tiãú p kiãø u naì y våï i säú láö n quay låï n nháú t laì 32). Ta nháû n tháú y nãú u CL=8 thç kãú t quaí khäng bë thay âäø i vç toaï n haû ng quay troì n âuï ng mäü t voì ng, coì n nãú u CL=4 thç 2 nibble cuí a noï bë âäø i chäù . Taï c âäü ng vaì o cåì : chè coï CF vaì OF bë aí nh hæåí ng. Sau lãû nh ROR cåì CF mang giaï trë cuî cuí a LSB, coì n cåì OF ← 1 nãú u sau khi quay mäü t láö n maì bit MSB bë thay âäø i so våï i træåï c khi quay. Cåì ì OF seî khäng âæåü c xaï c âënh sau nhiãö u láö n quay. Lãû nh naì y thæåì ng duì ng âãø taû o cåì CF tæì giaï trë cuí a LSB laì m âiãö u kiãû n cho caï c lãû nh nhaí y coï âiãö u kiãû n. Vê duû : ROR BX,1 MOV CL,8 ROR AL, CL
; quay voì ng qua phaí i thanh ghi BX. ; säú láö n quay âãø trong CL, ; quay voì ng qua phaí i thanh ghi AL 8
Trang : 56
; láö n, thanh ghi AL luï c naì y chæï a giaï ; trë ban âáö u (træåï c khi quay). SAHF - Store AH Register into byte of Flag Register (cáú t thanh ghi AH vaì o byte tháú p cuí a thanh cåì ) FR L ← AH
Mä taí :
Duì ng lãû nh naì y phäú i håü p våï i lãû nh POP AX thç coï thãø mä phoí ng lãû nh POP PSW cuí a bäü vi xæí lyï 8085 trãn 8088. Cáû p nháû t : AF, CF, OF, PF, SF, ZP. SAL - Shift Arithmetically Left (dëch traï i säú hoü c)/SHL - Shift (Logically) Left (dëch traï i logic). Viãú t lãû nh :
SAL Âêch,CL SHL Âêch,CL
Trong âoï toaï n haû ng âêch coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau. Mä taí : CF
MSB
LSB 0
Hçnh 3.13. Lãû nh SAL/SHL. Hai lãû nh naì y coï cuì ng taï c duû ng dëch traï i säú hoü c toaï n haû ng (coì n goü i laì dëch traï i logic âãø coï lãû nh âäú i ngáù u våï i lãû nh dëch phaí i logic seî noï i åí pháö n sau). Mäù i láö n dëch MSB seî âæåü c âæa qua cåì CF vaì 0 âæa vaì o LSB. Thao taï c kiãø u naì y âæåü c goü i laì dëch logic. CL phaí i âæåü c chæï a sàô n säú láö n quay mong muäú n. Trong træåì ng håü p quay mäü t láö n coï thãø viãú t træû c tiãú p : SAL Âêch,1
Trang : 57
(tæì caï c bäü vi xæí lyï thãú hãû sau nhæ 80186, 80286 ... thç coï thãø viãú t træû c tiãú p kiãø u naì y våï i säú láö n quay låï n nháú t laì 32). Ta nháû n tháú y mäü t láö n dëch traï i kiãø u naì y tæång âæång våï i mäü t láö n laì m pheï p nhán våï i 2 cuí a säú khäng dáú u. Vç váû y ta coï thãø laì m pheï p nhán mäü t säú våï i säú nhán khäng dáú u tæång âæång våï i 2 bàò ng caï ch dëch traï i säú hoü c säú bë nhán i láö n. Chênh vç váû y thao taï c naì y coì n âæåü c goü i laì dëch traï i säú hoü c. Trong chæì ng mæû c nháú t âënh láö n naì y chaû y nhanh hoen MUL. Taï c âäü ng vaì o cåì : Sau lãû nh SAL hoàû c SHL cåì CF mang giaï trë cuî cuí a MSB (vç váû y lãû nh naì y coì n duì ng âãø taû o cåì CF tæì giaï trë cuí a MSB laì m âiãö u kiãû n cho caï c lãû nh nhaí y coï âiãö u kiãû n), coì n cåì OF ← 1 nãú u sau khi dëch mäü t láö n maì bit MSB bë thay âäø i so våï i træåï c khi quay. Cåì ì OFOÎ e khäng âæåü c xaï c âënh sau nhiãö u láö n dëch.
Cáû p nháû t : SF, ZF, PF.PF chè coï yï nghéa khi kãú t quaí laì 8 bit. Khäng xaï c âënh : AF.
Vê duû : SAL BX,1 MOV CL,4 SLH AL, CL
; ; ; ; ;
dëch traï i säú hoü c thanh ghi BX säú láö n dëch âãø trong CL, dëch traï i thanh ghi AL 4 láö n, thanh ghi AL luï c naì y coï giaï trë bàò ng 1/16 thanh ghi AL ban âáö u.
SBB - Substract with Brrow (træì coï mæåü n) Viãú t lãû nh :
SBB Âêch,Gäú c
Mä taí :
Âêch ← Âêch - Gäú c - CF
Trong âoï toaï n haû ng âêch vaì gäú c coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau, nhæng phaí i chæï a cuì ng mäü t loaû i dæî liãû u vaì khäng âæåü c pheï p âäö ng thåì i laì 2 ä nhåï vaì cuî ng khäng âæåü c laì thanh ghi âoaû n. Cáû p nháû t : AF, CF, OF, PF, SF, ZP (AF vaì PF chè liãn quan âãú n 8bit tháú p).
Trang : 58
Vê duû : Caï c vê duû sau âáy coï thãø âaû i diãû n cho caï c chãú âäü âëa chè coï thãø coï trong lãû nh træì naì y cuî ng nhæ mäü t säú caï c lãû nh khaï c våï i ngæî phaï p tæång tæû . SBB SBB SBB SBB
AL,74H CL,BL DL,[SI] AL,Table[BX]
; ; ; ;
AL ← AL - 47 - CF CL ← CL - BL - CF DL ← DL - {DS:SI} - CF AL ← AL - {DS:(Table+BX)} - CF
SCAS/SCASB/CASW - Scan a String Byte or a String Word (Queï t chuäù i byte hay chuäù i tæì ) Viãú t lãû nh :
SCAS Chuäù iâêch SCASB SCASW
Mä taí : AL : Pháö ntæí chuäù iâêch, DI ← DI ± 1 tuyì theo DF, nãú u laì chuäù i Byte, AL : Pháö ntæí chuäù iâêch, DI ← DI ± 2 tuyì theo DF, nãú u laì chuäù i tæì . (Pháö ntæí chuäù iâêch laì do ES:DI hiãû n thåì i chè ra) Lãû nh SCAS so saï nh AL hoàû c AX våï i tæì ng byte hay tæì ng tæì cuí a xáu âêch chè âãø taû o caï c cåì , khäng læu kãú t quaí so saï nh, caï c toaï n haû ng khäng bë thay âäø i. Sau âoï DI tæû âäü ng tàng /giaí m âãø chè vaì o pháö n tæí tiãú p theo tuyì theo cåì hæåï ng. Khi dëch lãn SCAS Chuäù iâêch, chæång trçnh dëch duì ng tãn Chuäù iâêch âãø xaï c âënh xem luï c khai baï o thç Chuäù iâêch coï caï c pháö n tæí laì byte hay tæì . Muäú n chi roî cho chæång trçnh dëch håü p ngæî ràò ng ta laì m viãû c våï i chuäù i byte (chæï a caï c byte) hoàû c chuäù i tæì (chæï a caï c tæì ), ta cuî ng coï thãø duì ng lãû nh SCASB hoàû c SCASW. Caï c lãû nh naì y coì n thæåì ng duì ng keì m våï i REPNE/REPNZ âãø làû p laû i viãû c queï t mäü t säú láö n hoàû c queï t cho tåï i khi tçm âæåü c máù u cáö n tçm. Cáû p nháû t : AF, CF.OF, PF, SF, ZP. Vê duû :
Trang : 59
CLD BX,1 MOV AL,13 MOV CX,80 LEA DI, STR1 REPNE SCASB STR1
; ; ; ; ; ; ; ;
lamf viãû c våï i chuäù i theo chiãö u → AL chæï a maî ASCII cuí a kyï tæû vãö âáö u doì ng (CR), dëch queï t mäü t doì ng 80 kyï tæû , DI chè vaì o âáö u chuäù i STR1 âãø taû i âoaû n dæî liãû u ES so AL våï i mäü t pháö n tæí cuí a chuäù i âãø tçm CR.
SHL - Xem SAL SHR - Shift (Logically) Right (dëch phaí i logic) Viãú t lãû nh : SHL Âêch,CL SHL Âêch,CL Trong âoï toaï n haû ng âêch coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau.
Mä taí : MSB
LSB
CF
0
Hçnh 3.15. Lãû nh SHR. Lãû nh naì y duì ng âãø dëch phaí i logêc toaï n haû ng. Sau mäù i láö n dëch LSB seî âæåü c âæa qua cåì CF vaì 0 âæa vaì o MSB. Thao taï c kiãø u naì y âæåü c goü i laì dëc logêc. CL phaí i âæåü c chæï a sàô n säú láö n quay mong muäú n. Trong træåì ng håü p quay mäü t láö n coï thãø viãú t træû c tiãú p : SHR Âêch,1
Trang : 60
(tæì caï c bäü vi xæí lyï thãú hãû sau nhæ 80186, 80286 ... thç coï thãø viãú t træû c tiãú p kiãø u naì y våï i säú láö n quay låï n nháú t laì 32). Ta nháû n tháú y mäü t láö n dëch traï i kiãø u naì y tæång âæång våï i mäü t láö n laì m pheï p chia cho 2 cuí a säú khäng dáú u. Vç váû y ta coï thãø laì m pheï p chia mäü t säú khäng dáú u cho mäü t säú khäng dáú u tæång âæång våï i 2i bàò ng caï ch dëch phaí i logêc säú bë chia i láö n. Taï c âäü ng vaì o cåì : Sau lãû nh SHR cåì CF mang giaï trë cuî cuí a LSB(vç váû y lãû nh naì y coì n duì ng âãø taû o cåì CF tæì giaï trë cuí a LSB laì m âiãö u kiãû n cho caï c lãû nh nhaí y coï âiãö u kiãû n), coì n cåì OF ← 1 nãú u sau khi dëch mäü t láö n maì bit MSB bë thay âäø i so våï i træåï c khi dëch. Cåì ì OF seî khäng âæåü c xaï c âënh sau nhiãö u dëch. Cáû p nháû t : SF, ZF, PF.PF chè coï yï nghéa khi kãú t quaí laì 8 bit. Khäng xaï c âënh : AF.
Vê duû : SHR BX,1 MOV CL,4 SHR AL, CL
; ; ; ; ; ;
dëch phaí i lägêc thanh ghi BX. säú láö n dëch âãø trong CL, dëch phaí i thanh ghi AL 4 láö n, thanh ghi AL luï c naì y coï 4 bit tháú p bàò ng 4 bit cao ban âáö u vaì 4 bit cao laì 0.
STC - Set the Carry Flag (láû p cåì nhåï ) Mä taí :
CF ← 1.
Khäng taï c âäü ng âãú n caï c cåì khaï c. STD - Set the Direction Flag (Láû p cåì hæåï ng) Mä taí :
DF ← 1.
Trang : 61
Lãû nh naì y âënh hæåï ng thao taï c cho caï c lãû nh laì m viãû c våï i chuäù i theo chiãö u luì i (←). Caï c thanh ghi SI vaì DI liãn quan seî âæåü c tæû âäü ng giaí m khi laì m viãû c xong våï i mäü t pháö n tæí cuí a chuäù i. Khäng taï c âäü ng âãú n caï c cåì khaï c. SET - Set the Interrupt Flasg (láû p cåì cho pheï p ngàõ t) Mä taí :
IF ← 1.
Lãû nh naì y láû p cåì cho pheï p ngàõ t âãø cho pheï p caï c yãu cáö u ngàõ t taï c âäü ng vaì o chán INTR âæåü c CPU nháû n biãú t. Khi IF=1 nãú u coï tên hiãû u INTR=1 thç 8088 seî bë ngàõ t, noï seî tæû âäü ng ngàõ t thanh ghi cåì vaì âëa chè tråí vãö vaì o ngàn xãú p räö i chuyãø n sang chaû y chæång trçnh (con) phuû c vuû ngàõ t CTPVN. Taû i chuäù i CTPVN seî coï lãû nh tråí vãö CTC tæì CTPVN (IRET) âãø 8088 láú y laû i tæì ngàn xãú p giaï trë cuí a thanh ghi cåì vaì âëa chè tråí vãö . Khäng taï c âäü ng âãú n caï c cåì khaï c. STOS/STOSB/STOSW - Store AL/AX in String Byte/Word (cáú t AL/AX vaì o mäù i pháö n tæí cuí a chuäù i byte/tæì )
Viãú t lãû nh :
STOS Chuäù iâêch STOSB STOSW
Mä taí : AL : Pháö ntæí hiãû nthåì i, DI ← DI ± 1 tuyì theo DF, nãú u laì chuäù i Byte, AL : Pháö ntæí hiãû nthåì i, DI ← DI ± 2 tuyì theo DF, nãú u laì chuäù i tæì . (Pháö ntæí hiãû nthåì i cuí a chuäù i laì do ES:DI hiãû n thåì i chè ra) Lãû nh STOS cáú t AL/AX vaì o 1 byte/tæì (1 pháö n tæí cuí a chuäù i âaî âæåü c âënh nghéa træåï c laì chuäù i gäö m caï c byte hoàû c tæì . Do DI chè ra trong âoaû n ES, sau âoï DI tæû âäü ng tàng /giaí m âãø chè vaì o pháö n tæí tiãú p theo tuyì theo cåì hæåï ng. Khi dëch lãn STOS Chuäù iâêch, chæång trçnh dëch duì ng tãn Chuäù iâêch âãø xaï c âënh xem luï c khai baï o thç Chuäù iâêch coï caï c pháö n tæí laì byte hay tæì . Muäú n chi
Trang : 62
roî cho chæång trçnh dëch håü p ngæî ràò ng ta laì m viãû c våï i chuäù i caï c byte hoàû c caï c tæì ta cuî ng coï thãø duì ng lãû nh STOSB hoàû c STOSW. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : MOV DI,OFFSET STR1 MOV CL,4 STOS STR1
; ; ; ; ;
DI chè vaì o âáö u chuäù i STR1 âãø taû i âoaû n dæî liãû u phuû ES, Cáú t Acc vaì o 1 pháö n tæí cuí a chuäù i
Trong thê duû trãn chæång trçnh dëch håü p ngæî seî duì ng tãn STR1 âãø xaï c âënh kiãø u cuí a STR1 laì byte hay laì tæì räö i tæû âäü ng cáú t AL hay AX vaì o chuäù i. MOV DI,OFFSET STR1 MOV CL,4
; DI chè vaì o âáö u chuäù i ; STR1 âãø taû i âoaû n ; dæî liãû u phuû ES, STOS STR1 ; Cáú t Acc vaì o 1 pháö n tæí cuí a ; chuäù i Trong thê duû thæï 2 chæång trçnh dëch håü p ngæî seî hiãø u laì chæî “B” trong lãû nh STOSB xaï c âënh kiãø u cuí a STR1 laì byte vaì tæû âäü ng cáú t AL vaì o chuäù i. SUB - Substract ( træì hau toaï n haû ng) Viãú t lãû nh :
SUB Âêch,Gäú c.
Mä taí :
Âêch ← Âêch - Gäú c
Trong âoï toaï n haû ng âêch vaì gäú c coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau, nhæng phaí i chæï a dæî liãû u coï cuì ng âäü daì i vaì khäng âæåü c pheï p âäö ng thåì i laì 2 ä nhåï vaì cuî ng khäng âæåü c laì thanh ghi âoaû n. Coï thãø tham khaí o caï c vê duû cuí a lãû nh SBB.
Cáû p nháû t : AF, CF, OF, PF, SF, ZP ( AF vaì PF chè liãn quan âãú n 8 bit tháú p).
Trang : 63
TEST - And Operands to Update Flag ( vaì 2 toaï n haû ng âãø taû o cåì )
Viãú t lãû nh :
TEST Âêch,Gäú c.
Mä taí :
Âêch ∧ Gäú c
Trong âoï toaï n haû ng âêch vaì gäú c coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau, nhæng phaí i chæï a dæî liãû u coï cuì ng âäü daì i vaì khäng âæåü c pheï p âäö ng thåì i laì 2 ä nhåï vaì cuî ng khäng âæåü c laì thanh ghi âoaû n. Sau lãû nh naì y caï c toaï n haû ng khäng bë thay âäø i vaì kãú t quaí khäng âæåü c læu giæî . Caï c cåì âæåü c taû o ra seî âæåü c duì ng laì m âiãö u kiãû n cho caï c lãû nh nhaí y coï âiãö u kiãû n. Lãû nh naì y cuî ng coï taï c duû ng che nhæ mäü t màû t naû . Xoaï : CF, OF. Cáû p nháû t : PF, SF, ZP (PF chè liãn quan âãú n 8 bit tháú p). Khäng xaï c âënh : AF. Vê duû : TEXT AH,AL ; AH ∧ AL âãø taû o cåì TEXT AH,01H ; bit 0 cuí a AH bàò ng 0 TEXT BP, [BX] [DI] ; vaì BP våï i ä nhåï do ; BX + DI chè ra trong ; vuì ng dæî liãû u DS WAIT - Wait for TEST or INTR Signal (chåì tên hiãû u tæì chán TEXT hoàû c INTR) Mä taí : Lãû nh naì y âæa bäü xæí lyï 8088 vaì o traû ng thaï i nghé vaì noï seî mang laû i traû ng thaï i naì y cho tåï i khi coï tên hiãû u åí mæï c tháú p taï c âäü ng vaì o chán TEXT hoàû c khi coï tên hiãû u cao taï c âäü ng vaì o chán INTR. Nãú u coï yãu cáö u ngàõ t vaì yãu cáö u naì y âæåü c pheï p taï c âäü ng trong khi 8088 âang åí traû ng thaï i nghé thç sau khi thæû c hiãû n CTPVN noï laû i quay laû i traû ng thaï i nghé. Lãû nh naì y duì ng âãø âäö ng bäü hoaû t âäü ng cuí a 8088 vaì caï c bäü pháû n bãn ngoaì i nhæ bäü xæí lyï toaï n hoü c 8087.
Trang : 64
Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . XCHG - Exchange 2 Operands ( thaï o näü i dung hai toaï n haû ng) Viãú t lãû nh :
XCHG Âêch,Gäú c
Mä taí :
Âêch ↔ Gäú c
Trong âoï toaï n haû ng âêch vaì gäú c coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau, nhæng phaí i chæï a dæî liãû u coï cuì ng âäü daì i vaì khäng âæåü c pheï p âäö ng thåì i laì 2 ä nhåï vaì cuî ng khäng âæåü c laì thanh ghi âoaû n. Lãû nh XCHG toaï n haû ng naì y chæï a näü i dung cuî cuí a toaï n haû ng kia vaì ngæåü c laû i. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì . Vê duû : XCHG AH,AL ; XCHG AX,BX ; XCHG AL, Table[BX] ; ; ;
traï o näü i dung AH vaì AL traï o näü i dung cuí a AX vaì BX traï o näü i dung AL våï i ä nhåï coï âëa chè Table [BX] trong vuì ng dæî liãû u DS
XLAT - Translate a byte in AL ( Âäø i näü i dung AL theo baí ng cho træåï c) Viãú t lãû nh : XLAT Mä taí :
AL ← {AL + BX}
Lãû nh naì y duì ng âãø 8 bit hoàû t êt hån tæì maî naì y ( gäú c) sang maî khaï c (âêch) theo mäü t baí ng tra cho sàô n træåï c khi thæû c hiãû n lãû nh âäø i, baí ng tra phaí i chæï a caï c maî âêch vaì BX phaí i chæï a âëa chè lãû nh cuí a baí ng naì y trong âoaû n dæî liãû u. Coì n maî gäú c (cáö n âäø i) phaí i âæåü c chæï a trong AL. khi chaû y lãû nh XLAT thç pheï p cäü ng AL + BX phaí i âæåü c thæû c hiãû n âãø taû o ra âëa chè ä nhåï trong baí ng so maì näü i dung cuí a noï seî âæåü c caï ch tråí laû i vaì o thanh ghi AL. Lãû nh naì y khäng taï c âäü ng âãú n caï c cåì .
Trang : 65
AL 23H 0000H
0000H
AL
FFH
FF
⊕
FF
0123H
0123H
0100H
0124H 0124H BX
BX
0100H
XOR - Exclusive Or Corresponding Bits of two Operands ( hoàû c loaû i træì hai toaï n haû ng) Viãú t lãû nh :
XOR Âêch,Gäú c
Mä taí :
Âêch ← Âêch ⊕ Gäú c
Trong âoï toaï n haû ng âêch vaì gäú c coï thãø tçm âæåü c theo caï c chãú âäü âëa chè khaï c nhau, nhæng phaí i chæï a dæî liãû u coï cuì ng âäü daì i vaì khäng âæåü c pheï p âäö ng thåì i laì 2 ä nhåï vaì cuî ng khäng âæåü c laì thanh ghi âoaû n. Tæì tênh cháú t cuí a pheï p hoàû c loaû i træì ta tháú y nãú u toaï n haû ng âêch truì ng våï i toaï n haû ng gäú c thç kãú t quaí bàò ng 0, do âoï lãû nh naì y coì n âæåü c duì ng âãø xoaï vãö 0 mäü t thanh ghi naì o âoï vaì keì m theo caï c cåì CF vaì OF cuî ng bë xoaï . Cáû p nháû t : PF, SF, ZP, PF chè coï nghéa khi toaï n haû ng laì 8 biit. Khäng xaï c âënh : AF. Vê duû : XOR AL,BL XOR BH,BH
; AL ← AL ⊕ BL theo tæì ng bit mäü t ; xoaï BH, xoaï CF vaì OF.
Trãn âáy ta âaî giåï i thiãû u qua táú c caí caï c lãû nh coï trong táû p lãû nh cuí a bäü vi xæí lyï 8086/88. Màû c duì trong thæû c tãú láû p trçnh nhiãö u khi ta khäng sæí duû ng
Trang : 66
hãú t âæåü c táú t caí caï c lãû nh trong táû p lãû nh naì y. Táû p lãû nh naì y cuí a bäü vi xæí lyï cao cáú p hån trong hoü 80x86 ngoaì i nhæî ng lãû nh naì y coì n bao gäö m nhæî ng lãû nh khaï c næî a. Ta coï thãø coi âáy laì mäü t vê duû vãö mäü t táû p lãû nh cuí a mäü t bäü vi xæí lyï duì ng âãø chãú taû o ra maï y tênh våï i táû p lãû nh âáö y âuí (Complex instruction set computer CISC) våï i âàû c træng laì : coï ráú t nhiãö u lãû nh våï i caï c chãú âäü âëa chè ráú t âa daû ng, caï c lãû nh coï âäü daì i khaï c nhau vaì thåì i gian thæû c hiãû n cuî ng khaï c nhau. Bäü vi xæí lyï vç thãú thæåì ng coï cáú u truï c ráú t phæï c taû p. Thãú maì trãn thæû c tãú , trong caï c chæång trçnh håü p ngæî âãø giaí i quyãú t caï c cäng viãû c cuû thãø , thæåì ng coï nhiãö u lãû nh âæåü c duì ng våï i táö n suáú t låï n nhæng cuî ng coï nhæî ng lãû nh ráú t êt khi hoàû c tháû m chê khäng hãö âæåü c sæí duû ng. Âáy cuî ng chênh laì lyï do âãø caï c nhaì saí n xuáú t cho ra âåì i caï c bäü vi xæí lyï coï cáú u truï c caî i tiãú n theo hæåï ng âån giaí n hoaï våï i táû p lãû nh lãû nh ráú t hæî u duû ng ( coï säú lãû nh êt hån våï i chãú âäü âëa chè âån giaí n, caï c lãû nh coï âäü daì i thäú ng nháú t vaì coï thåì i gian thæû c hiãû n nhæ nhau) nhæng laijcos khaí nàng thæû c hiãû n lãû nh nhanh hån gáú p bäü i so våï i loaû i CISC. Âoï laì caï c bäü vi xæí lyï duì ng laì m CPU cho caï c maï y tênh våï i táû p lãû nh ruï t goü n (Redduced instruction set computer, RISC).