CSDN博客

img jacky_shen

运算指令描述

发表于2004/6/23 10:54:00  731人阅读

+---------+
+   MUL   +
+---------+

MOV AL, 4C
MOV BL, 11
MUL BL

4CH,11H全部作为无符号数处理
->4CH = 76D
->11H = 17D
->AX = 1292D = 050CH


+---------+
+   IMUL  +
+---------+

(1)
---
 MOV AL, 4C
 MOV BL, 11
 IMUL BL

4CH, 11H全部作为有符号数处理
4CH = 01001100B    <----D7位0,表示为正数
11H = 00010001B    <----D7位0,表示为正数

IMUL执行步骤
->4CH * 11H = 050C    (两数相乘)
->AX = 050CH    (正数*正数=正数)

(2)
---
 MOV AL, B4
 MOV BL, 11
 IMUL BL

B4H, 11H全部作为有符号数处理
B4H = 10110100B    <----D7位1,表示位负数
11H = 00010001B    <----D7位0,表示位正数

IMUL执行步骤
->(B4H)补 = (10110100)补 = 01001100 = 4CH    (转换为正数的过程)
->4CH * 11H = 050CH    (两数相乘)
->AX = (050CH)补 = FAF4H = -1292    (正数*负数=负数,则要进行求补;求补结果为FAF4H)

小结
----
在IMUL运算中,先将负数通过求补转换成正数,在相乘.如果是两个数中有一个为负数,就将两个正

数的乘积求补.如果两数都为负数,那个正数的乘积就是最后结果.如果两数都为正数,就直接相乘

就得到结果了.


+---------+
+   DIV   +
+---------+

MOV AX, 00EF
MOV BL, A1
DIV BL

给AX赋值,一定要16位内容.如果AH没有内容则输入0
00EFH = 0000000011101111B
A1H = 10100001B

->00EFH / A1H = 4E01H
->AX = 4E01H

AX / BL ---->AL存放商,AH存放余数

+---------+
+   IDIV  +
+---------+

MOV AX, 00EF
MOV BL, A1
DIV BL

给AX赋值,一定要16位内容.如果AH没有内容则输入0
00EFH = 0000000011101111B    <----最高位0,表示正数
A1H = 10100001B    <----最高位1,表示负数

->(A1H)补 = (10100001B)补 = 1011111B = 5FH
->00EFH / 5FH
->商为02D,余数为49D.
->由于(正数 / 负数 = 负数),所以最终商为-2D = FEH 即AL = FEH
->由于被除数为正数,则余数也为正数,所以最终余数为49D = 31H 即AH = 31H

小结
----
将两个数中的负数转换为正数(求补),然后相除,余数存放在AH(DX),商存放在AL(AX).
如果是异号则结果应为负数,则对AL(AX)的内容求补,得到最终商值.
如果被除数为负数则余数也为负数,则对AH(DX)的内容求补,得到最终余数值.


+---------+
+   DAA   +
+---------+

  (AL)<-把AL中的和调整到压缩的BCD格式,这条指令之前必需执行ADD或ADC指令,加法指令必须把

两个压缩的BCD码相加,并把结果存放在AL寄存器中.本指令的调整方法是:
(1)如果AF标志(辅助进位位)为1,或者AL寄存器的低4位是十六进制的A-F,则AL寄存器内容加06H,

且将AF位置1;
(2)如果CF标志为1,或者AL寄存器的高4位是十六进制的A-F,则AL寄存器内容加60H,并将CF位置1.
(2)DAA指令对OF标志无定义,但影响所有其他条件标志.


+---------+
+   DAS   +
+---------+

  (AL)<-把AL中的差调整到压缩的BCD格式,这条指令之前必须执行SUB或SBB指令,减法指令必须把

两个BCD码相减,并把结果存放在AL寄存器中.本指令的调整方法是:
(1)如果AF标志为1,或者AL寄存器的低4位是十六进制的A-F,则使AL寄存器的内容减去06H,并将AF

位置1;
(2)如果CF标志为1,或者AL寄存器的高4位是十六进制的A-F,则使AL寄存器的内容减去60H,并将CF

位置1.
(3)DAS指令对OF标志无定义,但影响所有其他条件标志.


+---------+
+   AAA   +
+---------+

  (AL)<-把AL中的和调整到非压缩的BCD格式
  (AH)<-(AH)+调整产生的进位值
这条指令之前必须执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存放在AL

寄存器中.本指令的调整步骤是:
(1)如果AL寄存器的低4位在0-9之间,且AF位为0,则跳过(2),执行(3)
(2)如果AL寄存器的低4位在十六进制数A-F之间或AF为1,则AL寄存器的内容加06H,AH寄存器的内容

加1,并将AF位置1;
(3)清除AL寄存器的高4位
(4)AF位的值送CF位
AAA指令除影响AF和CF标志外,其余标志均无定义


+---------+
+   AAS   +
+---------+

  (AL)<-把AL中的差调整到非压缩的BCD格式
  (AH)<-(AH)-调整产生的借位值
这条指令执行之前必须执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并把结果存放

在AL寄存器中,本指令的调整步骤是:
(1)如果AL寄存器的低4位在0-9之间,且AF位为0,则跳过(2),执行(3)
(2)如果AL寄存器的低4位在十六进制数A-F之间或AF位为1,则把AL寄存器的内容减去06H,AH寄存器

的内容减1,并将AF位置1
(3)清除AL寄存器的高4位
(4)AF位的值送CF位

0 0

相关博文

我的热门文章

img
取 消
img