BOÄ VI xöÛ lyù intel 8088



tải về 0.51 Mb.
trang1/4
Chuyển đổi dữ liệu17.08.2016
Kích0.51 Mb.
  1   2   3   4

Trang :

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ôùi thieäu caáu truùc beân trong vaøhoaït ñoäng cuûa boä vi xöû 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ø 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. 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öï





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ùc thanh ghi ñ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:



Ñòachævaä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ñoaïn: Thanhghileäch hay segment: offset

Ñò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ï: 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ï: Ñò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ùc thanh ghi ña 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.

  • 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ùc thanh ghi con troû vaø chæ 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ï 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ï theå

  • 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.



    1. 8086 vaø 8088




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 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õ hoaù leänh cuûaboä vi xöû 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.

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:


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 ).




MOD

R/M


00

01

10

11













W=0 W=1

000

[BX]+[8]

[BX]+[SI]+d8

[BX]+[SI]+d16

AL AX

001

[BX]+[DI]

[BX]+[DI]+d8

[BX]+[DI]+d16

CL CX

010

[BP]+[SI]

[BP]+[SI]+d8

[BP]+[SI]+d16

DL DX

011

[BP]+[DI]

[BP]+[DI]+d8

[BP]+[DI]+d16

BL BX

100

[SI]

[SI]+d8

[SI]+d16

AH SP

101

[DI]

[DI]+d8

[DI] +d16

CH BP

110

d16

(Ñòa chæ tröïc tieáp)



[BP]+d8

[BP]+d16

DH SI

111

[BX]

[BX]+d8

[BX]+d16

BH DI


cheá ñ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.

3.Caùc cheá ñoä ñòa chæ cuûa boä vi xöû 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 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á ñoä ñòa 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á ñoä ñòa chæ töùc 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á ñoä ñòa chæ tröïc 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.

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á ñoä giaùn 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á ñoä ñòa chæ töô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ù.

  • 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á ñoä ñòa chæ töông ñoái chæ 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át caùc cheá ñoä ñòa 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öông phaùp boû ngaàm ñònh thanh ghi ñ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 ñoaïn ngaàm ñònh

Thanh ghi

Reg




Töùc thì

Data




Tröïc tieáp

[offset]

DS

Giaùn tieáp qua thanh ghi

[BX]

[SI]


[DI]

DS

DS

DS



Töông ñoái cô sôû

[BX]+disp

[BP] +DISP



DS

SS


Töông ñoái chæ soá

[DI]+Disp

[SI]+ DISP



DS

DS


Töông ñoái chæ soá cô sôû

[BX]+[DI]+DISP

[BX]+[SI]+DISP

[BP]+[DI]+DISP

[BP]+[SI]+DISP



DS

DS

SS



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 .



4. Moâ taû taäp leänhcuûa boä vi xöû 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 ‘

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 )

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ï:


  1. ; 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.



  1. ; AL = 0011 0101B = 35H = ‘5’,

; 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, 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ø 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 ( 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, 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åi ñích, chuoåi 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 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 ).

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 : DEC Destination

Moâ taû: Ñí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 ) 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á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á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.

IMUL – Integer Multiplication ( Multiply Signed Numbers ) ( Nhaân soá coù ñaàu ).

Vieát leänh: IMUL Goá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.

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ôø.

Inc-Increment Destination Register or Memory ( taêng toaùn haïng ñích theâm 1 ).

Vieát leänh : Inc-Ñí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.

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



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 :


  1   2   3   4


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2016
được sử dụng cho việc quản lý

    Quê hương