MUL是进行无符号乘法的指令

2024-01-17 10:38 小编

MUL(无符号乘法)指令有三种格式:第一种是将8位的操作数于al相乘。第二种是将16位的操作数与ax相乘; 第三种是将32位的操作数与eax进行相乘

乘数和被乘数大小必须相同,乘积的尺寸是乘数/被乘数大小的两倍。 三种格式都既接受寄存器操作数,也接受内存操作数。但是不接受立即操作数(这点大家注意下)。

例如:

你想将al寄存器中的值乘上2,那么此时你需要将立即数2存放到一个寄存器中,然后通过mul指令相乘,或者将立即数放到一个内存地址中,然后通过内存单元的形式来进行相乘。

举例:

mov bl, 2

mul bl ;此刻将bl寄存器中的值乘上al寄存器中的值

指令中唯一的一个操作数是乘数。

也就是当我们的乘数是8位的时候,则与al相乘,如果我们的乘数是16位则与ax相乘,如果我们的乘数是32位则与eax寄存器相乘。

那么下面我给出mul乘法的相关操作数的实例

被乘数 乘数 积

al 8位操作数 ax

ax 16位操作数 dx:ax

eax 32位操作数 edx:eax

因为如果我们的乘数是一个8位操作数的话,我们的结果存在在ax寄存器中。 如果是16位操作数的话,我们的结果存放在dx:ax中。如果dx不为0,则进位标志置位。

在执行完mul指令后,我们一般要检查下进位标志。因为我们需要知道乘积的高半部分是否可以安全的忽略。

例如:

mov al, 6h

mov bl, 10h

mul bl

此刻我们检查进位标志cf = 0, 那么ah我们就可以将其忽略了,所以结果是60h。

那么我们再来举一个例子:

例如:

mov ax, 6000

mov bx, 5000

mul bx

我们检查进位标志,此时cf = 1。 那么我们的结果是dx:ax ,此时我们的dx = 1E00, ax = 0000 所以 最后我们的积 为 1E000000。


在线咨询 拨打电话

电话

13363039260

微信二维码

微信二维码