Thông tin tài liệu:
Việc dùng các biểu danh để tham chiếu là một tính năng then chốt của các trình hợp dịch, nó tiết kiệm một khối lượng lớn công việc tính toán và sửa đổi thủ công sau mỗi lần cải tiến ứng dụng.
Nội dung trích xuất từ tài liệu:
[Ngôn Ngữ Máy] Đề Cương Bài Giảng Hợp Ngữ (assembly language) phần 8 70Chöông 6 : Leänh nhaân vaø chia 6.2 Öùng duïng ñôn giaûn cuûa leänh MUL vaø IMUL Sau ñaây chuùng ta seõ laáy moät soá ví duï minh hoïa vieäc söû duïng leänhMUL vaø IMUL trong chöông trình . Ví duï 1 : Chuyeån ñoaïn chöông trình sau trong ngoân ngöõ caáp cao thaønh maõhôïp ngöõ : A = 5xA -12xB . Giaû söû raèng A vaø B laø 2 bieán töø vaø khoâng xaûy ra söï traøn . Code : MOV AX,5 ; AX=5 IMUL A ; AX=5xA MOV A,AX ; A=5xA MOV AX,12 ; AX=12 IMUL B ; AX=12xB SUB A,AX ; A=5xA-12xB Ví Duï 2 : vieát thuû tuïc FACTORIAL ñeå tính N! cho moät soá nguyeân döông . Thuûtuïc phaûi chöùa N treân CX vaø traû veà N! treân AX . Giaû söû khoâng coù traøn . Giaûi : Ñònh nghiaõ cuûa N! laø N! = 1 neáu N=1 = N x (N-1)x (N-2) x...x 1 neáu N>1 Thuaät toaùn ñeå tính N! nhö sau : Product =1 Term = N FOR N times DO Product = product x term term=term -1 ENDFOR Code : FACTORIAL PROC ; computes N! ; input : CX=N ; output : AX=N! MOV AX,1 ; AX=1 MOV CX,N ; CX=N TOP: MUL CX ; Product = product x term LOOP TOP ; RET FACTORIAL ENDP 71Chöông 6 : Leänh nhaân vaø chia 6.3 Leänh DIV vaø IDIV Cuõng nhö leänh nhaân , coù 2 leänh chia DIV vaø IDIV cho soá khoâng daáu vaø cho soácoù daáu . Cuù phaùp cuûa chuùng laø : DIV divisor IDIV divisor Toaùn haïng byte Leänh chia toaùn haïng byte seõ chia soá bò chia 16 bit ( dividend) treân AXcho soá chia ( divisor) laø 1 byte . Divisor phaûi laø 1 thanh ghi 8 bit hoaëc 1 byte nhôù . Thöông soá ôû treân AL coøn soá dö treân AH . Toaùn haïng töø Leänh chia toaùn haïng töø seõ chia soá bò chia 32 bit ( dividend) treânDX:AX cho soá chia ( divisor) laø 1 töø . Divisor phaûi laø 1 thanh ghi 16 bit hoaëc 1 töønhôù . Thöông soá ôû treân AX coøn soá dö treân DX . Aûnh höôûng cuûa caùc côø : caùc côø coù traïng thaùi khoâng xaùc ñònh . Divide Overflow Khi thöïc hieän pheùp chia keát quûa coùtheå khoâng chöùa heát treân AL hoaëc AX neáusoá chia beù hôn raát nhieàu so vôùi soá bò chia . Trong tröôøng hôïp naøy treân maøn hình seõxuaát hieän thoâng baùo : “ Divide overflow” Ví duï 1 : Giaû söû DX = 0000h , AX = 0005h vaø BX = 0002h Instruction Dec Quotient Dec Remainder AX DXDIV BX 2 1 0002 0001IDIV BX 2 1 0002 0001 Ví duï 1 : Giaû söû DX = 0000h , AX = 0005h vaø BX = FFFEh Instruction Dec Quotient Dec Remainder AX DXDIV BX 0 5 0000 0005IDIV BX -2 1 FFFE 0001 Ví duï 3 : Giaû söû DX = FFFFh , AX = FFFBh vaø BX = 0002h Instruction Dec Quotient Dec Remainder AX DXIDIV BX -2 -1 FFFE FFFFDIV BX OVERFLOW 72Chöông 6 : Leänh nhaân vaø chia Ví duï 4 : Giaû söû AX = 00FBh vaø BL = FFh Instruction Dec Quotient Dec Remainder AX DXDIV BL 0 251 FB 00I DIV BL OVERFLOW 6.4 Môû roäng daáu cuûa soá bò chia Pheùp chia vôùi toaùn haïng töø Trong pheùp chia vôùi toaùn haïng töø , soá bò chia phaûi ñaët treân DX:AX ngay caûkhi soá bò chia coù theå ñaët treân AX . Trong tröôøng hôïp naøy , caàn phaûi söûa soaïn nhö sau• Ñoái vôùi leänh DIV , DX phaûi bò xoaù• Ñoái vôùi leänh IDIV , DX phaûi ñöôïc môû roäng daáu cuûa AX . Leänh CWD ( ConvertWord to Doubleword ) seõ thöïc hieän vieäc naøy . ...