Giáo trình Assembly

Chia sẻ: Hoang Nhan | Ngày: | Loại File: PDF | Số trang:114

2
829
lượt xem
417
download

Giáo trình Assembly

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Ngôn ngữ assembly (còn gọi là hợp ngữ) là một ngôn ngữ bậc thấp được dùng trong việc viết các chương trình máy tính. Ngôn ngữ assembly sử dụng các từ có tính gợi nhớ, các từ viết tắt để giúp ta dễ ghi nhớ các chỉ thị phức tạp và làm cho việc lập trình bằng assembly dễ dàng hơn. Mục đích của việc dùng các từ gợi nhớ là nhằm thay thế việc lập trình trực tiếp bằng ngôn ngữ máy được sử dụng trong các máy tính đầu tiên thường gặp nhiều lỗi và tốn thời gian....

Chủ đề:
Lưu

Nội dung Text: Giáo trình Assembly

  1. Giáo trình Assembly
  2. CHÖÔNG 1 : SOÁ NHÒ PHAÂN Trong Computer döõ lieäu ñöôïc ghi nhôù baèng caùc maïch ñieän coù khaû naêng theå hieän moät soá traïng thaùi xaùc ñònh . Moãi maïch ñieän nhö vaäy laø moät phaàn töû nhôù caên baûn . Soá giaù trò moät phaàn töû nhôù caên baûn coù theå bieåu dieãn cuõng chính laø soá traïng thaùi maïch ñieän taïo neân noù coù theå xaùc ñònh. Do khaû naêng cuûa kyõ thuaät cheá taïo maïch, vaø cuõng do giaù thaønh cuûa maïch ñieän, caùc phaàn töû nhôù treân caùc Computer hieän nay ñeàu ñöôïc thieát laäp töø caùc maïch ñieän coù hai traïng thaùi xaùc ñònh bôûi möùc ñieän theá cao vaø thaáp. Töông öùng vôùi hai traïng thaùi cuûa maïch ñieän, moãi phaàn töû nhôù mang moät trong hai giaù trò 0 vaø 1. Moät phaàn töû nhôù nhö vaäy ñöôïc goïi laø moät bit . * Caùc toaùn töû treân bit : A B NOT A A AND B A OR B A XOR B A XOR (A XOR B) 0 0 1 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 1 1 0 1 1 0 1 1 0 1 1.1_ ÑÔN VÒ LÖU CHÖÙA THOÂNG TIN: Ñeå coù theå bieåu dieãn ñöôïc nhieàu giaù trò hôn, thoâng thöôøng ngöôøi ta löu chöùa thoâng tin döôùi daïng töøng nhoùm bit, moãi nhoùm bieåu thò cho moät phaàn töû cuûa thoâng tin. - Moät nhoùm 4 bit ñöôïc goïi laø nibble. - Moät nhoùm 8 bit ñöôïc goïi laø byte. Byte laø ñôn vò löu chöùa thoâng tin cô sôû treân caùc Computer hieän nay. Caùc boäi soá cuûa byte laø : 1 KB = 1024 byte ( 2 luõy thöøa 10 ) 1 MB = 1024 KB 1 GB = 1024 MB - Moät nhoùm 16 bit ñöôïc goïi laø word. - Moät nhoùm 32 bit ñöôïc goïi laø double word (dword). Computer truy nhaäp ñeán caùc thoâng tin theo ñôn vò nhoû nhaát laø byte . 1.2_HEÄ ÑEÁM: Caùc giaù trò soá löu chöùa trong Computer döôùi daïng töøng nhoùm caùc bit vôùi caùch bieåu dieãn 0 vaø 1 khaùc haún caùch bieåu dieãn soá thoâng thöôøng cuûa chuùng ta (duøng caùc kyù soá 0,1...9). Caùch bieåu dieãn soá cuûa chuùng ta döïa treân cô sôû möôøi kyù soá 0,1...9 ñöôïc goïi laø heä ñeám thaäp phaân, caùch bieåu dieãn soá trong Computer döïa treân cô sôû hai kyù soá 0 vaø 1 ñöôïc goïi laø heä ñeám nhò phaân. 1.2.1_Quy taéc cuûa moät heä ñeám theo vò trí: Heä ñeám cuûa chuùng ta hieän nay laø moät heä ñeám theo vò trí, döïa treân cô sôû möôøi kyù soá 0,1...9. Giaù trò cuûa moät soá ñöôïc bieåu dieãn baèng moät daõy caùc kyù soá, trong ñoù giaù trò cuûa moãi kyù soá tuøy thuoäc vaøo vò trí cuûa noù ôû trong daõy. Thí duï : 1 9 7 4 3 5 1*100000 + 9*10000 + 7*1000 + 4*100 + 3*10 + 5 105 104 103 102 101 10 1
  3. Goïi soá caùc kyù hieäu ñeå bieåu dieãn moät heä ñeám theo vò trí goïi laø cô soá C cuûa heä ñeám ta coù coâng thöùc toång quaùt : x = Σ Ci * Ki (Ki laø caùc kyù soá cuûa heä ñeám) 1.2.2_Caùc heä ñeám thoâng duïng : Heä nhò phaân : söû duïng caùc kyù soá 0 vaø 1 (bin : binary ) Heä baùt phaân : söû duïng caùc kyù soá 0,1...7 (Oct: ) Heä thaäp phaân: söû duïng caùc kyù soá 0,1...9 (dec : decimal) Heä thaäp luïc : söû duïng caùc kyù soá 0,1...9,A..F (hex : hexa ) Baûng ñoái chieáu caùc heä ñeám: Dec Hex Bin Dec Hex Bin 0 0 0000 8 8 1000 1 1 0001 9 9 1001 2 2 0010 10 A 1010 3 3 0011 11 B 1011 4 4 0100 12 C 1100 5 5 0101 13 D 1101 6 6 0110 14 E 1110 7 7 0111 15 F 1111 1.2.3_Quy öôùc bieåu dieãn caùc heä ñeám : • Caùc soá daïng bin keát thuùc baèng b. • Caùc soá daïng hex keát thuùc baèng h. • Caùc soá hex neân baét ñaàu bôûi kyù soá 0 (baét buoäc khi kyù soá ñaàu tieân laø A..F). Thí duï : 1991, 01000101b, 0F1h, 078h. Vieäc söû duïng heä nhò phaân treân Computer gaëp moät soá khoù khaên : ñeå bieåu dieãn moät giaù trò caàn quaù nhieàu kyù soá laøm cho ngöôøi söû duïng phaûi ghi cheùp nhieàu vaø raát khoù nhôù. Töø nhaän xeùt : heä nhò phaân laø moät heä con hoaøn toaøn cuûa heä thaäp luïc: taäp hôïp 4 bit nhò phaân coù theå bieåu dieãn 16 giaù trò soá khaùc nhau ( 24 ), ngöôøi ta thöôøng duøng caùc kyù soá thaäp luïc (0,1..9,AÏ.Z) ñeå bieåu dieãn thay cho töøng nhoùm 4 bit trong moät soá nhò phaân. 1 1 1 1 1 0 1 0 0 1 0 0 1 1 0 1 F A 4 D 1.3_ CAÙC PHEÙP TÍNH TREÂN HEÄ NHÒ PHAÂN Caùc pheùp tính cô baûn + - * / treân soá nhò phaân ñöôïc thöïc hieän vôùi caùc quy taéc nhö treân heä thaäp phaân . Tuy vaäy, phaûi chuù yù raèng caùc soá nhò phaân löu trong Computer ñöôïc ghi nhaän baèng moät soá caùc bit xaùc ñònh : coù soá caùc kyù soá xaùc ñònh. Do ñoù caùc pheùp tính chæ coù theå thöïc hieän treân khuoân khoå caùc laø caùc bit traøn . Caùc soá nhò phaân chuùng ta ñeà caäp keá tieáp laø caùc soá nhò phaân ñöôïc löu trong moät soá bit xaùc ñònh (8,16,32), töùc laø coù chieàu daøi khoâng ñoåi . 1.3.1_Pheùp coäng nhò phaân: 2
  4. Quy taéc : 0 + 0 = 0 0+1=1 1 + 1 = 0 nhôù 1 ( 10 ) Thí duï : 10011011 11010111 + + 00101011 00111011 ______________ ________________ 11000110 100010010 Bít traøn 1.3.2_Pheùp tröø nhò phaân: Quy taéc : 0-0=0 1-1=0 1-0=1 0 - 1 = 1 nhôù 1 Thí duï : 10011011 11010111 - - 00101011 00111011 _____________ ______________ 01110000 10011100 1.3.3_Pheùp nhaân nhò phaân: Quy taéc : 0*0=0 0*1=0 1*1=1 Thí duï : 11010111 x 101 ____________ 11010111 00000000 11010111 ___________________ 10000110001 1.3.4_Phaàn buø nhò phaân: Phaàn buø cuûa moät soá nhò phaân ñöôïc ñònh nghóa laø moät soá nhò phaân ñöôïc taïo thaønh töø soá ban ñaàu theo quy taéc caùc bit ñeàu ñöôïc ñaûo ngöôïc (NOT). Thí duï : phaàn buø cuûa 01001101 laø 10110010 3
  5. 01001101 1 0 1 1 0 0 1 0 soá ñoái = phaàn buø + 1 ( buø 2 ) Trong quaù trình xaùc ñònh caùch kyù hieäu cho caùc soá aâm ngöôøi ta nhaän thaáy caùc soá aâm taïo thaønh bao giôø cuõng coù bit cao nhaát laø 1, vaø caùc soá döông töông öùng coù bit cao nhaát laø 0 . Caùc nhaän xeùt treân ñöa ñeán caùc heä quaû veà soá nhò phaân coù daáu nhö sau : • Caùc soá aâm bao giôø cuõng coù bit cao nhaát laø 1 . • Moät soá aâm coäng soá ñoái töông öùng cuûa noù seõ cho keát quaû laø 0 . • Caùc soá coù daáu coäng vôùi nhau seõ cho keát quaû ñuùng nhö pheùp coäng caùc soá nguyeân ( Haõy chöùng minh -3+2 = -1 ) . 4
  6. CHÖÔNG 2 : CAÁU TRUÙC MOÄT MAÙY VI TÍNH IBM PC INTERRUPT TIMER CLOCK CPU CONTROLLER DMA MEMORY SYSTEM BUS KEYBOARD VIDEO DISKETTE HARD DISK IO CONTROLLER CONTROLLER CONTROLLER CONTROLLER INTERFACE 2.1_BOÄ XÖÛ LYÙ TRUNG ÖÔNG Trung taâm cuûa moät maùy vi tính IBM PC laø boä xöû lyù trung öông (CPU) 8088 do Intel saûn xuaát . 8088 laø moät vi maïch ñaëc bieät, coù khaû naêng töï thöïc hieän moät loaït caùc meänh leänh ñöôïc lieät keâ tröôùc,coù khaû naêng töï phaùn ñoaùn ñeå choïn caùch ñaùp öùng vôùi caùc tình huoáng trong quaù trình thöïc hieän leänh. Moãi meänh leänh 8088 ñöôïc bieåu thò baèng moät nhoùm caùc byte. Caùc byte aáy ñöôïc goïi laø maõ leänh (opcode) cuûa boä xöû lyù . Khi thöïc hieän coâng vieäc cuûa mình CPU ñoïc caùc maõ leänh ñöôïc löu chöùa trong boä nhôù cuûa maùy tính vaø thöïc hieän chuùng theo thöù töï lieân tieáp nhau. 2.2_BOÄ NHÔÙ Boä nhôù laø nôi löu chöùa caùc meänh leänh maø CPU seõ phaûi thöïc hieän,cuõng laø nôi ghi nhôù caùc thoâng tin, caùc giaù trò trung gian, caùc keát quaû cuûa quaù trình laøm vieäc ... Boä nhôù ñöôïc taïo thaønh töø hai loaïi chính : - Boä nhôù chæ ñoïc - ROM (Read Only Memory) - Boä nhôù ñoïc/ghi - RAM (Random Access Memory) Caùc thoâng tin ghi treân ROM laø coá ñònh vaø khoâng xoùa ñöôïc: mang tính chaát “vónh cöûu” Caùc thoâng tin treân RAM coù theå ñöôïc söûa ñoåi tuøy thích, nhöng nhöõng gì ñang ñöôïc löu giöõ trong RAM seõ maát ñi khi taét maùy. Trong moät maùy tính, moãi phaàn töû nhôù thuoäc ROM hoaëc RAM ñöôïc ghi nhaän bôûi moät soá thöù töï (goïi laø ñòa chæ). 2.3_CAÙC MAÏCH HOÃ TRÔÏ Ñeå coù theå hoaït ñoäng ñöôïc, CPU caàn ñeán söï hoã trôï cuûa nhieàu vi maïch khaùc. Ñoàng thôøi, CPU cuõng khoâng theå giao tieáp vôùi ngöôøi söû duïng baèng caùc giaù trò nhò phaân bieåu dieãn döôùi daïng caùc xung ñieän . Noù phaûi nhôø ñeán caùc maïch giao dieän (Interface) nhö keyboard controller,video controller ... Caùc maïch giao dieän naøy seõ ñieàu ñoäng tröïc tieáp ñeán caùc phöông tieän giao tieáp cuï theå vôùi ngöôøi söû duïng (nhö maøn hình,baøn phím,maùy in ...) theo caùc yeâu caàu,caùc thoâng tin ñöôïc gôûi ñeán töø CPU. 2.4_PORT Ñeå lieân laïc vôùi caùc vi maïch hoã trôï,caùc maïch giao dieän, CPU duøng moät heä thoáng ñòa chæ rieâng ( khaùc vôùi heä thoáng ñòa chæ ñònh vò cuûa boä nhôù ) ñeå xaùc ñònh ñoái töôïng caàn ñoái thoaïi . Moãi ñòa chæ trong heä thoáng naøy ñöôïc goïi laø moät coång (port) . Moãi vi maïch hoã trôï, moãi maïch giao dieän seõ chieám duïng moät soá coång xaùc ñònh . Khi caàn giao tieáp, CPU chæ caàn söû duïng ñeán caùc coång töông öùng. 5
  7. 2.5_CLOCK Caùc maïch ñieän ít khi naøo coù thôøi gian thöïc hieän gioáng nhau. Do ñoù, ñeå caùc phaàn töû trong moät maùy tính hoaït ñoäng nhòp nhaøng aên khôùp vôùi nhau phaûi coù moät boä phaän ñeám nhòp . Ñaûm nhieäm coâng vieäc naøy laø moät boä phaän taïo xung nhòp cho taát caû caùc maïch ñieän trong maùy . Boä phaän naøy ñöôïc goïi laø ñoàng hoà cuûa maùy . Maùy coù ñoàng hoà vôùi taàn soá caøng cao thì seõ chaïy caøng nhanh. 2.6_BUS CPU vaø caùc maïch coù lieân quan ñöôïc noái song song vôùi moät daûi caùc keânh lieân laïc, nguoàn cung caáp ñieän ... caáu truùc naøy ñöôïc goïi laø bus. Bus ñöôïc chia thaønh 4 phaàn chính: 1. Command bus 2. Address bus 3. Data bus 4. Power bus Heä thoáng quaûn lyù bus goïi laø Bus controller Giao tieáp thoâng qua bus ñöôïc thöïc hieän nhö sau : Giaû söû CPU caàn taêng giaù trò töø moät phaàn töû nhôù taïi ñòa chæ X leân 1 ñôn vò, noù phaûi traûi qua caùc böôùc sau : 1. Ñaët ñòa chæ X vaøo address bus 2. Ñöa yeâu caàu ñoïc memo vaøo command bus 3. Ñôïi Bus thoâng baùo saün saøng : bus controller laáy giaù trò taïi ñòa chæ X ñaët vaøo Data bus 4. Tieáp nhaän giaù trò caàn ñoïc töø data bus 5. Taêng giaù trò aáy leân 1 ( pheùp toaùn ñöôïc thöïc hieän trong CPU ) 6. Ñaët giaù trò môùi trôû laïi data bus 7. Ñöa yeâu caàu ghi memo vaøo command bus (address bus ñang giöõ giaù trò cuõ) 6
  8. 8. CHÖÔNG 3 : BOÄ VI XÖÛ LYÙ 8088 3.1_CAÙC THANH GHI CUÛA BOÄ VI XÖÛ LYÙ 8088 Boä vi xöû lyù 8088 coù moät soá phaàn töû duøng ñeå ghi nhôù caùc giaù trò trung gian trong quaù trình laøm vieäc,taïo ra caùc ñòa chæ,laøm caùc pheùp tính...Caùc phaàn töû naøy goïi laø caùc thanh ghi (Register). 8088 laø boä vi xöû lyù 16 bit, caùc taùc vuï cuûa 8088 thöôøng döôïc thöïc hieän treân 16 bit doàng thôøi,caùc thanh ghi cuûa 8088 ñeàu laø caùc phaàn töû nhôù 16 bit.Caùc thanh ghi hoaøn toaøn coù theå söû duïng nhö caùc phaàn töû nhôù thuoäc veà RAM. Ñieåm khaùc nhau giöõa thanh ghi vaø caùc phaàn töû nhôù thuoäc RAM laø Thanh ghi laø caùc phaàn töû thuoäc boä vi xöû lyù (veà maët vaät lyù). Moät soá taùc vuï ñaëc bieät nhö nhaân hay chia, keát quaû baét buoäc phaûi ñaët trong thanh ghi Moät soá thanh ghi chæ duøng ñeå xaùc ñònh ñòa chæ cho 8088 Caùc taùc vuï treân thanh ghi nhanh hôn nhieàu so vôùi caùc taùc vuï treân RAM. Bôûi vì ñeå thöïc hieän caùc taùc vuï treân RAM,8088 phaûi ñi qua moät quaù trình nhö sau : a) Ñoïc thoâng tin töø RAM (thoâng qua Bus) b) Thöïc hieän taùc vuï c) Ghi traû laïi thoâng tin vaøo RAM (thoâng qua Bus) Boä vi xöû lyù 8088 coù 14 thanh ghi 16 bit,ñöôïc chia thaønh nhoùm theo chöùc naêng nhö sau: 3.1.1_Nhoùm thanh ghi ña duïng : AX,BX,CX,DX : Moãi thanh ghi coù theå söû duïng nhö hai thanh ghi 8 bit vôùi caùc teân AH,AL,BH,BL,CH,CL,DH,DL FEDCBA98 7654321 AH AL AX BH BL BX CH CL CX DH DL DX 3.1.2_Nhoùm thanh ghi con troû vaø chæ muïc : SP,BP,SI,DI : thöôøng duøng ñeå taïo caùc ñòa chæ, cuõng coù theå duøng ñeå löu chöùa caùc soá lieäu nhö nhoùm thanh ghi ña duïng 3.1.3Nhoùm thanh ghi phaân ñoaïn : CS,DS,SS,ES : Chæ duøng ñeå xaùc ñònh Segment, khoâng cho pheùp thöïc hieän caùc pheùp tính soá hoïc,logic ... 3.1.4Thanh ghi con troû leänh IP : Chæ duøng ñeå xaùc ñònh offset cuûa maõ leänh 3.1.5Thanh ghi côø hieäu Flag : Ghi laïi traïng thaùi cuûa caùc pheùp tính soá hoïc, keát quaû cuûa caùc pheùp so saùnh ... F E D C B A 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF 3.2CAÙCH XAÙC ÑÒNH ÑÒA CHÆ CUÛA 8088 7
  9. Boä vi xöû lyù 8088 duøng moät soá 20 bit ñeå xaùc ñònh ñòa chæ cho caùc phaàn töû trong vuøng nhôù (memory), töông ñöông vôùi 1MB vò trí. Baèng caùc giaù trò 16 bit,ta chæ coù theå taïo ra ñòa chæ cho 0FFFFh phaàn töû ( 64 KB hay 65536 byte ). Do ñoù ñeå coù theå ñònh vò 1 MB ñòa chæ baèng caùc thanh ghi 16 bit, 8088 söû duïng nguyeân taéc truy nhaäp boä nhôù theo töøng segment,moãi segment coù kích thöôùc 64 KB, ñieåm baét ñaàu cuûa segment phaûi laø moät ñòa chæ chia heát cho 010h ( 16 thaäp phaân ) . Ñòa chæ cuûa segment ñöôïc tính baèng paragraph ( 1 paragraph = 16 byte ). Ñòa chæ moät phaàn töû naøo ñoù thuoäc ñoaïn seõ ñöôïc xaùc ñònh thoâng qua ñòa chæ töông ñoái (offset) cuûa phaàn töû ñoù trong ñoaïn vaø vò trí cuûa ñoaïn . Töø nguyeân taéc treân, ta coù caùc keát quaû sau : Ñòa chæ 20 bit = Segment*16 + Offset Caùch bieåu dieãn : Segment:offset Cuøng moät ñòa chæ, coù theå bieåu dieãn döôùi nhieàu hình thöùc khaùc nhau. Thí duï: 0040:006C vaø 0000:046C laø hai caùch bieåu dieãn moät ñòa chæ Segment chæ laø khaùi nieäm logic, do ñoù khoâng coù vò trí coá ñònh cho töøng segment . Ta hoaøn toaøn coù theå moâ taû caùc segment phuû laáp leân nhau. Boä vi xöû lyù 8088 luoân xaùc ñònh segment thoâng qua giaù trò cuûa caùc thanhghi segment. Do ñoù ñeå xaùc ñònh segment ta phaûi gaùn caùc giaù trò töông öùng cho caùc thanh ghi segment. Thanh ghi CS chæ ñònh segment cuûa ñoaïn maõ chöông trình ñang thöïc hieän,IP mang giaù trò offset. Vì vaäy CS:IP luoân laø ñòa chæ cuûa leänh ñang ñöôïc thöïc hieän. Thanh ghi DS chæ ñònh segment cuûa döõ lieäu,thoâng thöôøng caùc ñòa chæ ñeàu ñöôïc caên cöù theo segment DS . Thanh ghi SS chæ ñònh segment cuûa STACK ( seõ noùi roõ hôn trong phaàn sau). Thanh ghi ES duøng trong caùc taùc vuï veà chuoãi hoaëc theo yeâu caàu rieâng. 3.3CAÙC XAÙC ÑÒNH OFFSET CUÛA 8088 Offset cuûa boä vi xöû lyù 8088 ñöôïc xaùc ñònh theo nguyeân taéc sau : Offset laø moät haèng soá TD : [046Ch] Offset laø giaù trò cuûa moät trong caùc thanh ghi chæ muïc BX,SI,DI,BP TD : [BX] Offset laø giaù trò cuûa moät toång ñöôïc taïo thaønh töø caùc haèng soá,caùc thanh ghi chæ muïc ... Nguyeân taéc naøy coù moät soá haïn cheá : - SI vaø DI khoâng ñöôïc cuøng coù maët trong toång - BX vaø BP khoâng ñöôïc cuøng coù maët trong toång TD : [SI+BX] [DI+BX+020h] TD : [SI+BP+041h] Segment maëc nhieân : khi xaùc ñònh moät ñòa chæ, khoâng phaûi luùc naøo ta cuõng phaûi chæ ra thanh ghi segment naøo seõ ñöôïc söû duïng . Neáu khoâng coù chæ ñònh cuï theå thanh ghi segment, caùc offset taïo thaønh töø caùc haèng soá vaø caùc thanh ghi chæ muïc BX,SI,DI luoân ñöôïc hieåu laø ñi keøm vôùi thanh ghi segment DS . Offset ñöôïc taïo thaønh töø BP ñöôïc hieåu laø ñi keøm vôùi thanh ghi SS Neáu chuùng ta chæ ñònh roõ raøng thanh ghi segment ñi keøm vôùi offset, caùc giaù trò maëc nhieân veà segment seõ bò voâ hieäu hoaù . 3.4 BOÄ 8088 THÖÏC HIEÄN MOÄT CHÖÔNG TRÌNH RA SAO ? 3.4.1Theá naøo laø moät chöông trình : Chöông trình laø moät taäp hôïp caùc maõ leänh vaø caùc döõ lieäu . Maõ leänh (code) : laø caùc leänh 8088 seõ thöïc hieän Döõ lieäu (data) : laø caùc thoâng tin chöông trình seõ söû duïng ñeán .Thí duï : chöông trình cuûa baïn seõ in 8
  10. doøng chöõ “Do you like me ?” ra maøn hình thì doøng chöõ aáy phaûi coù maët trong chöông trình cuûa baïn. Vuøng löu chöùa doøng chöõ naøy trong chöông trình ñöôïc goïi laø moät vuøng döõ lieäu (data) . Chöông trình cuûa baïn cuõng caàn ñeán moät soá vuøng nhôù ñeå löu chöùa caùc giaù trò trong quaù trình chöông trình ñöôïc thöïc hieän, caùc vuøng nhôù naøy cuõng ñöôïc goïi laø vuøng döõ lieäu . Phaûi chuù yù, boä 8088 khoâng theå phaân bieät ñaâu laø code, ñaâu laø data ! 3.4.2Caùch thöùc 8088 thöïc hieän moät chöông trình : Giaû söû ñaõ coù chöông trình trong RAM vaø CS:IP chæ ñeán leänh ñaàu tieân cuûa chöông trình . 8088 ñoïc byte xaùc ñònh bôûi CS:IP,nhaän dieän leänh, töø ñoù suy ra chieàu daøi cuûa leänh . 8088 coäng theâm vaøo IP chieàu daøi cuûa leänh, roài baét ñaàu thöïc hieän leänh . Sau khi thöïc hieän leänh, 8088 ñoïc tieáp byte ñang ñöôïc xaùc ñònh bôûi CS:IP vaø cöù theá quaù trình naøy laëp ñi laëp laïi maõi . Chöông trình cuûa chuùng ta ñöôïc thöïc hieän töø leänh ñaàu tieân ñeán leänh cuoái cuøng theo phöông caùch naøy . Nhöng laøm caùch naøo ñeå ñöa moät chöông trình vaøo RAM vaø laøm caùch naøo ñeå aán ñònh CS:IP chæ ñeán leänh ñaàu tieân cuûa chöông trình aáy ? Taát caû caùc taùc vuï naøy ñeàu do heä ñieàu haønh thöïc hieän . Chöông trình cuûa chuùng ta ñöôïc löu chöùa treân ñóa thaønh moät file coù phaàn môû roäng (ñuoâi ñaëc tính) laø COM hay EXE . Khi ta goõ töø baøn phím teân cuûa file naøy vaø nhaán ENTER, heä ñieàu haønh seõ ñoïc file aáy vaøo RAM, sau ñoù ñöa vaøo CS vaø IP caùc giaù trò ñeå CS:IP chæ vaøo leänh ñaàu tieân cuûa chöông trình vöøa ñöôïc naïp vaøo. Sau ñoù laø quaù trình thöïc hieän chöông trình cuûa chuùng ta nhö ñaõ neâu treân. Laøm caùch naøo ñeå keát thuùc chöông trình cuûa chuùng ta ? Nhö ñaõ neâu treân, 8088 khoâng ngöøng ñoïc vaø phaân giaûi caùc leänh theo ñòa chæ ñöôïc CS vaø IP xaùc ñònh,do ñoù keát thuùc moät chöông trình naøo ñoù khoâng coù nghóa laø 8088 ngöøng hoaït ñoäng (!) . Quaù trình keát thuùc moät chöông trình ñöôïc thöïc hieän baèng caùch laøm cho CS:IP chæ vaøo moät ñieåm xaùc ñònh tröôùc trong vuøng maõ cuûa heä ñieàu haønh ( coøn goïi laø chuyeån ñieàu khieån cho heä ñieàu haønh ) . Sau ñoù laø quaù trình ñôïi leänh cuûa heä ñieàu haønh . Quaù trình ñôïi leänh cuûa heä ñieàu haønh nhö chuùng ta nhìn thaáy, coù veû nhö “maùy tính ñang ngöøng laøm vieäc,chôø chuùng ta ra leänh tieáp” ! Ñaây laø ñieàu laàm töôûng cuûa nhieàu ngöôøi môùi baét ñaàu laøm quen vôùi Computer. Chuùng ta phaûi luoân nhôù raèng maùy tính lieân tuïc phaân giaûi vaø thöïc hieän caùc leänh ñöôïc CS:IP chæ ñeán vaø chæ ngöøng khi chuùng ta ... taét maùy ! 3.4.3Chuùng ta taïo ra chöông trình baèng caùch naøo : Caùc maõ leänh trong chöông trình cuûa chuùng ta laø caùc soá nhò phaân bieåu dieãn thaønh töøng byte . Chuùng ta seõ raát khoù khaên neáu phaûi vieát moät chöông trình baèng töøng soá nhò phaân nhö vaäy . Trong thöïc teá chuùng ta seõ vieát moät chöông trình nguoàn, ñoù laø moät file vôùi caùc ñaëc ñieåm : - Söï trình baøy tuaân thuû theo moät soá quy taéc chung - Moãi leänh cuûa 8088 seõ ñöôïc goïi baèng moät caùi teân gôïi nhôù . - Caùc ñòa chæ ñöôïc xaùc ñònh bôûi caùc teân rieâng do ngöôøi vieát quy ñònh .... - Chöông trình nguoàn seõ ñöôïc moät chöông trình ñaëc bieät bieân dòch (compile) thaønh moät file vôùi ñaày ñuû caùc maõ leänh vaø caùc döõ lieäu ñaõ moâ taû trong chöông trình nguoàn . Vì vaäy chuùng ta khoâng caàn phaûi thaéc maéc leänh naøy hoaëc leänh kia coù maõ maùy laø gì ! 3.4.4Moät chöông trình nguoàn seõ ñöôïc bieân dòch baèng Assembler 86 : Code Segment Assume CS:Code,DS:Code org 0100h Main proc near M1: mov dx,offset chuoi1 ; in chuoi1 ra maøn hình mov ah,9 ; int 021h ; mov ah,1 ; Read Keyboard 9
  11. int 021h ; cmp al,’Y’ ; Kieåm tra kyù töï doïc vaøo je KT ; neáu laø ‘Y’ hay ‘y’ thì nhaûy deán KT cmp al,’y’ je KT mov ah,02 ; Neáu khoâng, Beep moät tieáng roài quay laïi M1 mov dl,7 int 021h ; jmp M1 KT: mov dx,offset chuoi2 ; In chuoi2 mov ah,9 ; int 021h ; int 020h ; Keát thuùc chöông trình Main endp Chuoi1 db 13,’Do you like me ? $’ ; Maõ 13 ñeå trôû veà ñaàu doøng Chuoi2 db ‘ Thank you !$’ Code ends end main 10
  12. CHÖÔNG 4 : ASSEMBLER 86 Ngöõ phaùp cuûa caùc trình hôïp dòch thoâng duïng hieän nay nhö MASM,TASM ... khaù phöùc taïp, do ñoù taøi lieäu naøy seõ chæ trình baøy caùc phaàn caên baûn maø haàu heát trình hôïp dòch thoâng duïng ñeàu chaáp nhaän. Nhöõng phaàn caên baûn nhaát cuûa ngöõ phaùp cuûa assembler cho boä xöû lyù 8088/86 seõ ñöôïc trình baøy trong chöông naøy. Caùc phaàn khaùc seõ ñöôïc ñeà caäp ñeán trong caùc chöông sau. 4.1NGÖÕ PHAÙP CUÛA ASSEMBLER 86 Offset Var_X neáu khoâng khai SEGMENT-A baùo Segment Offset Var_X neáu coù khai baùo Segment Var_X SEGMENT-B SEGMENT-C 4.1.1Khai baùo segment Chöông trình cuûa chuùng ta coù theå söû duïng ñeán nhieàu segment khi ñöôïc thöïc hieän : Ñeå truy nhaäp ñeán moãi segment, ta phaûi gaùn ñòa chæ cuûa segment töông öùng cho caùc thanh ghi segment . Sau ñoù, caùc phaàn töû thuoäc veà segment seõ ñöôïc truy nhaäp thoâng qua offset cuûa noù trong segment aáy. Löu yù laø vieäc gaùn giaù trò cho caùc thanh ghi segment chæ ñöôïc thöïc hieän trong luùc chöông trình ñang thöïc hieän . Trong quaù trình hôïp dòch, trình hôïp dòch khoâng theå kieåm soaùt ñöôïc giaù trò thöïc cuûa thanh ghi segment . Do ñoù söï phaân chia chöông trình thaønh caùc segment hoaøn toaøn laø caùc yù nieäm cuûa ngöôøi laäp trình . Moät trong caùc nhieäm vuï quan troïng cuûa trình hôïp dòch laø xaùc ñònh chính xaùc caùc offset theo caùc segment cuûa chöông trình chuùng ta . Neáu khoâng coù moät söï löu yù naøo veà segment seõ ñöôïc söû duïng, trình hôïp dòch seõ cho raèng toaøn boä chöông trình ôû trong cuøng moät segment . Khi aáy caùc phaàn töû thuoäc chöông trình ñeàu ñöôïc trình hôïp dòch xaùc ñònh ñòa chæ töông ñoái (offset) theo ñieåm ñaàu cuûa chöông trình . Thí duï : moät vò trí thuoäc SEGMENT-B seõ ñöôïc tính offset theo cöï ly töø ñaàu SEGMENT-A cho ñeán vò trí cuûa noù trong toaøn boä ñoaïn maõ chöông trình ñöôïc taïo ra .Khai baùo veà Segment seõ löu yù trình bieân dòch veà phaïm vi cuûa caùc segment cuøng caùc phaàn töû thuoäc veà chuùng.Theo ñoù trình bieân dòch seõ xaùc ñònh ñuùng caùc offset töông öùng theo nguyeân taéc : phaàn töû ñöôïc xeùt thuoäc segment naøo seõ ñöôïc xaùc ñònh cöï ly theo ñieåm khôûi ñaàu cuûa segment aáy . 11
  13. Moät Segment ñöôïc khai baùo vôùi trình hôïp dòch theo daïng thöùc sau : Teân-segment Segment [word/byte] [Public] . . ( Phaïm vi cuûa segment ) . . Teân-segment ends Caùc phaàn töû thuoäc veà segment naøo phaûi ñöôïc moâ taû beân trong caáu truùc segment ñoù. Ñeå xaùc ñònh thanh ghi segment seõ duøng cho segment ñöôïc moâ taû ta duøng khai baùo sau : Assume Thanh-ghi:Teân-segment[,Thanh-ghi:Teân-segment [...] ] TD : Assume CS:Code,DS:Code ;xaùc ñònh vôùi trình hôïp dòch CS vaø DS seõ cuøng mang giaù trò cuûa Code segment . Löu yù : Chæ thò Assume chæ laø söï khai baùo cho trình hôïp dòch bieát caùc thanh ghi segment seõ ñöôïc söû duïng nhö theá naøo chöù khoâng taïo ra pheùp gaùn giaù trò cho caùc thanh ghi aáy ! 4.1.2Khai baùo thuû tuïc Chöông trình cuûa chuùng ta ñöôïc vieát thaønh caùc thuû tuïc (procedure) . Moät procedure coù caáu truùc nhö sau : Teân-procedure proc [near/far] . . Teân-procedure endp Beân trong thuû tuïc laø caùc leänh, caùc khai baùo veà döõ lieäu ... Moãi moät leänh, moãi moät khai baùo ñeàu ñöôïc vieát döôùi daïng moät doøng leänh . Khai baùo thuû tuïc trong hôïp ngöõ chæ laø hình thöùc . Chuùng ta coù theå boû qua caùc khai baùo aáy maø vaãn taïo laäp ñöôïc moät soá chöông trình ñôn giaûn . Tuy vaäy vieát chöông trình döôùi daïng caùc thuû tuïc seõ laøm chöông trình cuûa chuùng ta trôû neân roõ raøng vaø deã quaûn lyù hôn . Khi chöông trình ñöôïc vieát döôùi daïng caùc thuû tuïc, vieäc khai baùo thuû tuïc raát quan troïng. Trình hôïp dòch seõ caên cöù treân caùc khai baùo aáy maø xaùc ñònh chính xaùc caùc maõ leänh töông öùng vôùi caùc chæ thò JMP, CALL vaø RET . 4.1.3Caáu truùc moät doøng leänh A. Doøng leänh moâ taû : Moâ taû haèng ( khoâng taïo ra maõ leänh ) Teân EQU Giaù trò Moâ taû haèng duøng ñeå ñònh nghóa moät soá giaù trò seõ ñöôïc duøng ñeán trong chöông trình . Sau khi ñöôïc moâ taû, moãi khi söû duïng ñeán giaù trò naøo chuùng ta chæ caàn duøng teân töông öùng . Trình hôïp dòch seõ töï ñoäng thay theá giaù trò thöïc cuûa haèng vaøo ñoaïn maõ töông öùng . Moâ taû bieán Teân Loaïi Danh saùch giaù trò ( Trong ñoù Loaïi coù theå laø [Byte/Word/Dword] ) Moâ taû bieán duøng ñeå xaùc ñònh moät ñòa chæ,töø ñoù baét ñaàu löu chöùa caùc thoâng tin vôùi tính chaát neâu trong “Loaïi” vaø chi tieát ñöôïc lieät keâ trong “Danh saùch giaù trò”. Khi caàn truy nhaäp ñeán caùc thoâng tin naøy chuùng ta duøng teân bieán nhö moät moác ñòa chæ. 12
  14. Thí duï : Bieán-A ñòa chæ taïi nôi khai baùo Bieán-A Bieán-A[1] ñòa chæ Bieán-A + 1 Bieán-A[2] ñòa chæ Bieán-A + 2 Bieán-A[-1] ñòa chæ Bieán-A - 1 Trình hôïp dòch seõ töï ñoäng ñoåi ra ñòa chæ thöïc cuûa bieán trong caùc chæ thò coù duøng ñeán bieán. Moâ taû nhaõn Teân LABEL Loaïi ( Trong ñoù Loaïi coù theå laø [Byte/Word/Dword/Near/Far] ) Moâ taû nhaõn duøng ñeå xaùc ñònh moät vò trí trong chöông trình,tính chaát cuûa ñòa chæ aáy tuøy thuoäc vaøo “Loaïi” ñöôïc khai baùo . Trình hôïp dòch seõ taïo ra caùc ñòa chæ,caùc cöï ly thöïc trong caùc chæ thò coù lieân heä ñeán teân nhaõn. Moâ taû bieán vaø nhaõn cho pheùp chuùng ta chæ ñònh caùc vò trí trong chöông trình theo vò trí logic cuûa chuùng chöù khoâng theo ñòa chæ thöïc cuûa chuùng . Khi hôïp dòch, trình hôïp dòch seõ tính caùc cöï ly thöïc söï vaø thay theá chuùng vaøo caùc maõ leänh töông öùng . Ñeå laáy ñòa chæ moät phaàn töû duøng caáu truùc : Offset Teân-phaàn-töû Thí duï : Mov dx,offset Bieán-A Caùc quy ñònh chung : Teân : laø moät chuoãi taïo bôûi caùc kyù töï, caùc kyù soá vaø - (daáu gaïch döôùi). Teân khoâng ñöôïc baét ñaàu baèng kyù soá. Trình hôïp dòch quy ñònh sau daáu chaám phaåy (;) laø caùc lôøi chuù thích. Ta coù theå ñaët baát cöù ghi chuù gì ôû ñaáy . Moãi giaù trò trong moâ taû haèng hoaëc bieán coù theå laø : - Moät haèng soá, moät teân haèng ñaõ khai baùo - Moät bieåu thöùc goàm caùc haèng soá,teân haèng taïo thaønh töø caùc pheùp toaùn: - Soá hoïc : + - * / - Logic : NOT AND OR XOR - vaø daáu () Thí duï : GT-A equ 020h ; Coù giaù trò laø 00100000b GT-B equ 040h ; Coù giaù trò laø 01000000b Bieán-A db NOT 010h ; Coù giaù trò laø 11101111b Bieán-B db GT-A OR GT-B ; Coù giaù trò laø 01100000b B. Doøng leänh thöïc hieän [Nhaõn:] Leänh Ñoái töôïng Teân : laø moät chuoãi taïo bôûi caùc kyù töï, caùc kyù soá vaø - (daáu gaïch döôùi). Teân khoâng ñöôïc baét ñaàu baèng kyù soá. Sau daáu chaám phaåy (;) laø caùc lôøi chuù thích . Ta coù theå ñaët baát cöù ghi chuù gì ôû ñaáy . 4.1.4Caùc loaïi (kieåu) cô baûn Loaïi : Loaïi byte : khai baùo baèng töø khoùa DB. Moãi phaàn töû trong danh saùch giaù trò chieám 1 byte 13
  15. Thí duï: a/ Soá-hoïc-vieân DB 0,0,0 ;khai baùo Soá-hoïc-vieân laø moät giaù trò kieåu byte, chieám taát caû 3 byte, giaù trò ban ñaàu cuûa caû 3 byte naøy laø 0 b/ File-name DB ‘Thidu1.asm’,0 ;khai baùo File-name laø moät giaù trò kieåu byte, chieám taát caû 11 byte, giaù trò ban ñaàu cuûa caùc byte naøy laàn löôït laø maõ cuûa töøng kyù töï trong daáu nhaùy vaø cuoái cuøng laø 0 c/ Buffer DB 20 dup (0) ;khai baùo Buffer laø moät giaù trò kieåu byte, chieám taát caû 20 byte, caùc byte mang giaù trò ñöôïc moâ taû trong caëp daáu ngoaëc ñôn ( 0 ). Chuù yù : - Chæ coù kieåu byte môùi chaáp nhaän chuoãi kyù töï - Ñeå bieåu dieãn moät byte,ta coù theå ghi giaù trò cuûa byte ñoù döôùi daïng soá thaäp phaân, soá thaäp luïc, soá nhò phaân hoaëc laø moät kyù töï (coù maõ töông öùng) ñaët giöõa hai daáu nhaùy ñôn . TD : 65, 041h, ‘A’ laø caùc caùch bieåu dieãn khaùc nhau cuûa cuøng moät giaù trò . - Caùc vuøng nhôù löu chöùa giaù trò ñöôïc khai baùo ñöôïc goïi laø caùc bieán cuûa chöông trình - Kieåu ñöôïc khai baùo chæ duøng laøm giaù trò ngaàm ñònh ñeå xaùc ñònh loaïi döõ lieäu ñöôïc thao taùc trong caùc leänh . Ta hoaøn toaøn coù theå chæ ñònh kieåu baát kyø cho moät bieán trong caùc leänh moät caùch töôøng minh. Loaïi word : khai baùo baèng töø khoùa DW Moãi phaàn töû trong danh saùch giaù trò chieám 2 byte (1 word) Loaïi double word : khai baùo baèng töø khoùa DD Moãi phaàn töû trong danh saùch giaù trò chieám 4 byte (2 word) Chuù yù : Döõ lieäu löu chöùa trong RAM coù moät soá ñieåm khaùc vôùi caùch bieåu dieãn thoâng thöôøng cuûa chuùng ta : nhöõng soá bieåu dieãn baèng nhieàu byte nhö loaïi word, double word ñöôïc ghi nhôù trong RAM theo quy taéc byte thaáp ñöùng tröôùc, byte cao ñöùng sau. Thí duï : giaù trò hai byte 01234h ñöôïc ghi nhôù taïi ñòa chæ 0462:0180 nhö sau : 0462:0180 034h 0462:0181 012h Chuù yù : Khi noùi moät giaù trò ñöôïc ghi nhôù taïi moät ñòa chæ naøo ñoù ta phaûi hieåu laø “ñöôïc ghi nhôù baét ñaàu töø ñòa chæ ñaõ chæ ra” ! 4.1.5Phaân loaïi chöông trình Ñoái vôùi heä ñieàu haønh DOS, chöông trình cuûa chuùng ta ñöôïc chia thaønh hai loaïi chính : - Loaïi COM : chæ söû duïng 1 segment, coù kích thöôùc toái ña gaàn 64 KB khi ñöôïc thöïc thi, caùc thanh ghi segment ñeàu ñöôïc gaùn giaù trò cuûa segment hieän löu chöùa chöông trình . Do ñoù trong moät file COM, neáu khoâng coù nhu caàu truy nhaäp ñeán caùc vuøng nhôù ngoaøi segment cuûa chöông trình, khoâng caàn phaûi chuù yù ñeán vieäc xaùc ñònh giaù trò caùc thanh ghi segment. Giaù trò cuûa IP khi chöông trình ñöôïc thöïc thi luoân luoân baèng 0100h . - Loaïi EXE : söû duïng nhieàu segment, khoâng haïn cheá veà kích thöôùc khi ñöôïc thöïc thi, caùc thanh ghi segment caàn ñöôïc gaùn giaù trò cuûa segment coù lieân quan . Giaù trò cuûa IP khi chöông trình ñöôïc thöïc thi tuøy thuoäc töøng chöông trình cuï theå . Trong taøi lieäu naøy, caùc chöông trình thí duï ñeàu ñöôïc vieát döôùi daïng COM . 4.2CAÙC LEÄNH CAÊN BAÛN 4.2.1Leänh MOV Daïng leänh : MOV ñích,nguoàn 14
  16. Keát quaû : döõ lieäu seõ ñöôïc ñem töø “nguoàn” vaøo “ñích” (giaù trò cuûa nguoàn vaãn giöõ nguyeân) Trong ñoù “nguoàn” vaø “ñích” coù theå laø : - Thanh ghi - Soá - Offset . Neáu laø offset thì phaûi chæ ra seõ söû duïng byte hay word baèng caùch söû duïng caùc khai baùo : Byte PTR offset ( 8 bit ) Word PTR offset ( 16 bit ) Thí duï : MOV AX,BX MOV AX,word PTR [SI+3] MOV AH,0Fh MOV word PTR [SI+BX],BX MOV AH,byte PTR [BX] MOV byte PTR [DI+4],9 Ñeå laáy ñòa chæ cuûa moät teân ( nhaõn hoaëc bieán ) ta thöïc hieän nhö sau : MOV DX,offset chuoi1 hoaëc LEA DX,chuoi1 Leänh treân seõ ñöa vaøo DX offset cuûa chuoi1 Chuù yù : - Ñích vaø nguoàn phaûi coù kích thöôùc baèng nhau - Boä vi xöû lyù 8088 khoâng theå thöïc hieän caùc taùc vuï vôùi caû hai ñoái töôïng cuøng ñöôïc ñònh vò bôûi offset . Do ñoù leänh sau laø khoâng hôïp leä : Mov byte ptr [SI],byte ptr [DI+2] 4.2.2Leänh XCHG Daïng leänh : XCHG ñích,nguoàn Keát quaû : döõ lieäu giöõa “nguoàn” vaøo “ñích” seõ ñöôïc ñoåi choã cho nhau 4.2.3Caùc leänh coäng,tröø Daïng leänh : ADD ñích,nguoàn ADC ñích,nguoàn (coäng) SUB ñích,nguoàn SBB ñích,nguoàn (tröø) Keát quaû : giaù trò cuûa “ñích” ñöôïc coäng (hay tröø) vôùi nguoàn, keát quaû ñöôïc ñaët vaøo “ñích” .Giaù trò cuûa “nguoàn” khoâng ñoåi Neáu laø ADC hay SBB, keát quaû ñöôïc coäng theâm hay tröø bôùt 1 khi bit CF = 1. 4.2.4Caùc leänh nhaân,chia *Leänh nhaân : MUL giaù trò 8 bit (thanh ghi/offset) Thanh ghi AL ñöôïc nhaân vôùi giaù trò 8 bit,keát quaû laø giaù trò 16 bit ñaët trong AX Thí duï : Mov AL,3 Mov CL,2 Mul CL keát quaû AX=6 MUL giaù trò 16 bit (thanh ghi/offset) Thanh ghi AX nhaân vôùi giaù trò 16 bit, keát quaû laø giaù trò 32 bit ñaët trong DX vaø AX 15
  17. Thí duï : Mov AX,3 Mov CX,0100h Mul CL keát quaû DX=0 AX=0300h *Leänh chia : DIV giaù trò 8 bit (thanh ghi/offset) Thanh ghi AX ñöôïc chia cho giaù trò 8 bit, keát quaû laø giaù trò 8 bit ñaët trong AL,soá dö ñaët trong AH Thí duï : Mov AX,035h Mov CL,010h Div CL Keát quaû AL=3 AH=5 DIV giaù trò 16 bit (thanh ghi/offset) Giaù trò 32 bit ñaët trong thanh ghi DX vaø AX (gioáng nhö keát quaû pheùp nhaân 16 bit) chia cho giaù trò 16 bit, keát quaû laø giaù trò 16 bit ñaët trong AX,soá dö ñaët trong DX Thí duï : Mov DX,038h ; giaù trò 32 bit trong DX vaø Mov AX,02147h ; AX laø 0382147h Mov CX,01000h Div CX keát quaû AX=0382h (thöông soá) DX=0147h (soá dö) 4.2.5Leänh CMP vaø leänh TEST Daïng leänh : CMP ñích,nguoàn TEST dích,nguoàn Caùch thöïc hieän : CMP thöïc hieän pheùp tính : nguoàn – ñích, TEST laáy nguoàn AND vôùi ñích. Keát quaû : Khoâng laøm thay ñoåi giaù trò cuûa ñích vaø nguoàn, keát quaû thöïc hieän ñöôïc ghi nhaän trong thanh ghi côø hieäu Flag,ñeå nhaän ñònh keát quaû phöông phaùp thoâng thöôøng laø duøng nhoùm leänh chuyeån ñieàu khieån coù ñieàu kieän. 4.2.6Leänh JMP (chuyeån ñieàu khieån khoâng ñieàu kieän) Daïng leänh : JMP Nhaõn 4.2.7Nhoùm leänh chuyeån ñieàu khieån coù ñieàu kieän . Daïng leänh : Caùc giaù trò khoâng daáu Caùc giaù trò coù daáu YÙ nghóa JB Nhaõn JL Nhaõn < JBE Nhaõn, JNA Nhaõn JLE Nhaõn, JNG Nhaõn = JA Nhaõn JG Nhaõn > 16
  18. JNB Nhaõn JNL Nhaõn >= JNE Nhaõn JE Nhaõn JNA Nhaõn JNG Nhaõn = BX thì gaùn Max = AX JMP M-2 ; Roài chuyeån ñieàu khieån ñeán M-2 M-1: MOV Max,BX ; Gaùn Max = BX, sau ñoù thöïc hieän tieáp taïi M-2 M-2: ... ; Keát quaû : Max laø giaù trò lôùn nhaát Max dw 0 ; giöõa AX vaø BX 4.2.8Nhoùm leänh logic Daïng leänh : AND ñích,nguoàn XOR ñích,nguoàn, OR ñích,nguoàn NOT ñích 4.2.9Nhoùm leänh shift Daïng leänh : SHL ñích,1 hay SHL ñích,CL SHR ñích,1 hay SHR ñích,CL Taùc duïng : “ñaåy” caùc bit cuûa ñích theo chieàu töø bit thaáp ñeán bit cao (sang traùi/SHL) hay theo chieàu töø bit cao qua bit thaáp(sang phaûi/SHR) vôùi soá bit laø 1 hay laø giaù trò trong CL. Bit bò ñaåy “loït ra ngoaøi” ñöôïc ñaët trong CF . Caùc khoaûng troáng do leänh shift taïo ra ñöôïc ñieàn baèng giaù trò 0 Tröôùc khi SHL Sau khi SHL 1 Sau khi SHL 2 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 CF = 0 CF = 1 CF = 0 Tröôùc khi SHR Sau khi SHR 1 Sau khi SHR 2 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 1 0 CF = 0 CF = 1 CF = 1 Daïng leänh : ROL ñích,1 hay ROL ñích,CL ROR ñích,1 hay ROR ñích,CL 17
  19. Taùc duïng : Bit cao nhaát vaø bit thaáp nhaát cuûa ñích ñöôïc xem nhö ñöùng caïnh nhau trong moät voøng troøn . ROL vaø ROR seõ ñaåy caùc bit theo chieàu töø bit thaáp ñeán bit cao (ROL) hoaëc theo chieàu töø bit cao sang bit thaáp (ROR) trong voøng troøn aáy vôùi soá bit laø 1 hay laø giaù trò trong CL . Tröôùc khi ROL Sau khi ROL 1 Sau khi ROL 2 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0 Tröôùc khi ROR Sau khi ROR 1 Sau khi ROR 2 1 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 1 1 0 Daïng leänh : RCL ñích,1 hay RCL ñích,CL RLR ñích,1 hay RCR ñích,CL Taùc duïng : töông töï ROL vaø ROR, nhöng bit giaù trò cuûa CF ñöôïc ñaët cheøn vaøo giöõa ñieåm noái cuûa bit cao nhaát vaø bit thaáp nhaát.Voøng quay goàm 9 ( hay 17 ) bit . Tröôùc khi RCL Sau khi RCL 1 Sau khi RCL 2 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 1 Tröôùc khi RCR Sau khi RCR 1 Sau khi RCR 2 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 CF = 0 CF = 1 F=1 18
  20. CHÖÔNG 5 : STACK - PROCEDURE - INTERRUPT 5.1Khaùi nieäm veà STACK Boä vi xöû lyù 8088 daønh rieâng caùc thanh ghi SS vaø SP cho vieäc quaûn lyù STACK, ñoù laø moät caáu truùc ñaëc bieät ñöôïc quy ñònh nhö sau : STACK laø moät vuøng nhôù thuoäc veà segment do SS xaùc ñònh Thanh ghi SP ñoùng vai troø moät con troû xaùc ñònh ñieåm laøm vieäc cuûa STACK Coù hai taùc vuï chuaån treân STACK : - PUSH thanhghi/offset (16 bit) :Caát giaù trò 16 bit trong thanhghi/offset vaøo stack - POP thanhghi/offset (16 bit) :Laáy giaù trò 16 bit trong stack ñaët vaøo thanhghi/offset Caùch thöïc hieän : Taùc vuï Push : tröø SP cho 2, sau ñoù ñaët moät giaù trò 16 bit vaøo ñòa chæ SS:SP Taùc vuï Pop : laáy giaù trò 16 bit taïi ñòa chæ SS:SP roài coäng SP vôùi 2 Neáu ta duøng taùc vuï Push ñeå caát nhieàu giaù trò vaøo STACK, caùc giaù trò naøy ñöôïc xeáp thaønh moät haøng, giaù trò naøo ñöôïc push vaøo tröôùc ñöùng ñaàu haøng, giaù trò naøo push vaøo sau ñöùng cuoái haøng .Taùc vuï Pop seõ laáy caùc giaù trò töø STACK theo thöù töï töø cuoái haøng . Do ñoù thöù töï laáy caùc giaù trò töø STACK baèng Pop phaûi ngöôïc laïi thöù töï ñaõ caát chuùng baèng Push . Trong quaù trình thöïc hieän chöông trình ñeå traùnh hieän töôïng caùc quaù trình trung gian laøm sai laïc giaù trò caùc thanh ghi, bieän phaùp thoâng thöôøng laø caát giaù trò caùc thanh ghi naøy vaøo STACK tröôùc khi thöïc hieän quaù trình trung gian . Thöïc hieän quaù trình trung gian xong, laáy laïi giaù trò ñaàu cho caùc thanh ghi töø STACK. Thí duï : push DX ; caát DX push AX ; caát AX mov ah,2 ; mov dl,7 ; beep int 021h ; pop AX ; laáy laïi AX pop DX ; laáy laïi DX Chuù yù : - Soá phaàn töû coù theå caát vaøo stack chæ tuøy thuoäc vaøo kích thöôùc cuûa stack. - Ñaõ caát giaù trò naøo vaøo stack thì phaûi nhôù laáy ra ! 5.2THUÛ TUÏC Chöông trình cuûa chuùng ta coù moät soá ñoaïn ñöôïc söû duïng nhieàu laàn . Ñoái vôùi caùc ñoaïn chöông trình naøy, toát nhaát laø toå chöùc thaønh caùc thuû tuïc (procedure) Moãi laàn caàn söû duïng ta chæ caàn goïi ñeán chuùng theo caùc teân ñaõ ñöôïc ñaët . Vieäc toå chöùc thaønh thuû tuïc seõ giuùp cho chöông trình ngaén goïn vaø roõ raøng hôn nhieàu. Boä vi xöû lyù 8088 cung caáp caùc leänh coù lieân quan ñeán thuû tuïc nhö sau : 5.2.1Chæ thò CALL 19
Đồng bộ tài khoản