+---------+
+ 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位