Bài soạn vi xử lý - Chương 3: Bộ vi xử lý intel 8088

Tài liệu Bài soạn vi xử lý - Chương 3: Bộ vi xử lý intel 8088: CHƯƠNG 3 BỘ VI XỬ LÝ INTEL 8088 Sau khi đã tìm hiểu qua về cấu trúc của hệ vi xử lý. Trong chương này ta sẽ đi sâu tìm hiểu mọt bộvi xử lý cụ thể và rất điển hình: bộ vi xử lý của Intel. Trước hết cần nói rỏ lý do tại sao ở đâyta lại chọn đích danh bộ vi zử láy 8088 để tìm hiểu mà không phải là bộ vi xử lý nào khác ( điều mà nhiều người khác phải làm ). Thứ nhất, đây là bộ vi xử lý nổi tiếng một thời thuộc họ 80x86 của Intel, nó được sử dụng trong nhiều lĩnh vực khác nhau, nhất là trong các máy IBM PC /XT. Các bộ vi xử lý thuộc họ này sẽ còn được sủ dụng rộng rãi trong hàng chục năm nữa, và vi tính kế thừa của các sản phẩm trong họ 80x86., các chương trình viết cho8088 vẫn có thể chạy trên các hệ thống tiên tiến sau này. Thứ hai, về góc độ sư phạm thì đây là bộ vi xử lý khá đơn giản và vì việc dạy hiểu nó là tương đối dể đối với những n...

doc65 trang | Chia sẻ: tranhong10 | Lượt xem: 998 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Bài soạn vi xử lý - Chương 3: Bộ vi xử lý intel 8088, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
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. 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. 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: Cheá ñoä ñòa chæ thanh gi ( register addressing mode ). Cheá ñoä ñòa chæ töùc thì ( immediate addressing mode ). Cheá ñoä ñòa chæ tröïc tieáp ( direct addressing mode ). Cheá ñoä ñòa chæ giaùn tieáp qua thanh ghi ( register indirect addressing mode ). Cheá ñoä ñòa chæ töông ñoái cô sôû ( based indexed relative addressing mode ). Cheá ñoä ñòa chæ töông ñoái chæ soá ( indexed relative addressing mode ). 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ï: ; 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’, ; 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 00HFFH. 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: SP <- SP-2, {SP} <- FR IF <- 0 ( caám caùc ngaét taùc ñoäng ). TF <-0 ( chaïy suoát ). SP <- SP-2, {SP} <- CS SP <- SP-2, {SP} <- IP {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 : 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” (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 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 : JG NHAN JNLE NHAN 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)+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 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 : JG NHAN JNLE NHAN 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)=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 hån hoàûc ; bàòng 10H. 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 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 : JLE NHAN JNG NHAN 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)+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 : 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 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 Âá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) 8000H Nhaíytræûctiãúp Dëchchuyãøn8 Lãûnh hiãûn taûi -128 - + Nhaíy gáön : +127 b) Mätaíthanhghi Nhaíygiaïntiãúp 7FFFH c) DëchchuyãønHi DëchchuyãønLo Nhaíytræûctiãúp Nhaíy xa : 0000H oooo h Âoaûn 64 Kbyte d) NHANCSLo NHANCSHi NHANIPHi NHANIPLo Nhaíytræûctiãúp Mätaíthanhghi Nhaíygiaïntiãúp Hçnh 3.8. caïc kiãøu lãûnh nhaíy khäng âiãöu kiãûn (JUMP). 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 : JNE NHAN JNZ NHAN 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 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 : 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 : JNO NHAN Mä taí : 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 ; tênh täøng 2 säú coï dáúu trong AL vaì AH JNO THOI ; 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 : JNO NHAN JPO NHAN 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 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. 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 : JNS NHAN Mä taí : 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 : JO NHAN Mä taí : IP ¬ IP + Dëchchuyãøn. Âá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 ; tênh täøng 2 säú coï dáúu trong AL vaì AH JO THOI ; 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 : JP NHAN JPE NHAN 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 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) Viãút lãûnh : JS NHAN Mä taí : 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 : LDS Âê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, 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åì. Vê duû : LEA DX, MSG ; naûp âëa chè lãûch cuía baín tin ; MSG vaìo DX. LEA CX, [BX] [DI] ; 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. 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û : CLD ; laìm viãûc våïi chuäùi theo chiãöu ® LEA SI, STRI ; SI chè vaìo âáöu chuäùi STRI âãø ; taûi âoaûn dæî liãûu DS LODS STRI ; 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 ; xoaï AL MOV CX,16 ; säú láön làûp âãø taûi CX LAP: INC AL ; tàng AL thãm 1 LOOP LAP ; 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 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 ; AL âæåüc gaïn giaï trë cuía AH MOV CX,100 ; âãø âãúm säú láön làûp LAP: INC AL ; tàng AL thãm 1 CMP AL,16 ; AL=16 ? LOOP LAP ; 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 ; AL âæåüc gaïn giaï trë cuía AH MOV CX,100 ; âãø âãúm säú láön làûp LAP: INC AL ; tàng AL thãm 1 CMP AL,16 ; AL=16 ? LOOP LAP ; 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 ; AL ¬ 74 MOV CL,BL ; CL ¬ BL MOV DL,[SI] ; DL ¬ {DS:SI} MOV AL,Table [BX] ; 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, 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. 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 : ALGäú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 : AXGäú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). 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) 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 ; AL ¬ AL v BL theo tæìng bit OR BL, 30H ; 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 : 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 : POP Âêch Mä taí : Âê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 ; láúy 2 byte tæì âènh ngàn xãúp ; âæa vaìo DX. POP Table[BX] ; 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 : POPF Mä taí : 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åì. 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 ; cáút BX vaìo ngàn xãúp taûi vë trê Trisdo SP chè ra. PUSH Table[BX] ; 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åï) 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 ; quay traïi thanh ghi BX thäng ; qua CF MOV CL,8 ; säú láön quay âãø trong CL, RCL AL, 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. 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 ; quay phaíi thanh ghi BX thäng qua CF MOV CL,8 ; säú láön quay âãø trong CL, RCR AL, CL ; quay phaíi thanh ghi AL 8 láön thäng ; 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 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í : 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 ; quay voìng sang traïi thanh ghi BX MOV CL,8 ; säú láön quay âãø trong CL, ROL AL, 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. 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 ; quay voìng qua phaíi thanh ghi BX. MOV CL,8 ; säú láön quay âãø trong CL, ROR AL, CL ; quay voìng qua phaíi thanh ghi AL 8 ; 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åì) Mä taí : FRL ¬ AH 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 (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 ; dëch traïi säú hoüc thanh ghi BX MOV CL,4 ; säú láön dëch âãø trong CL, SLH AL, 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). 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 AL,74H ; AL ¬ AL - 47 - CF SBB CL,BL ; CL ¬ CL - BL - CF SBB DL,[SI] ; DL ¬ DL - {DS:SI} - CF SBB AL,Table[BX] ; 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ç C

Các file đính kèm theo tài liệu này:

  • docchuong 3.doc