汇编基础学习26

文章转自 http://www.mcany.cn/article/301.htm

博主 没落的残阳

 

这节课中我们来深入的学习下乘法指令。乘法指令有两种,一种是有符号整数乘法另一种是无符号整数乘法,今天我们来学习无符号整数乘法。
        
        MUL是进行无符号乘法的指令。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。

        其实我们从乘积就可以算出来cf是否置位了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值