汇编语言中的乘法指令为什么两数位数相同

如题所述

  两个相乘的数,要么都是8位,要么都是16位。为什么呢?

  解释如下:
  按照规定,如果是8位相乘,一个默认存储在AH中,另一个存储在8位寄存器或者内存字节单元中,计算结果默认放在AX中;
  如果是16位相乘,一个默认存储在AX中,另一个存储在16位寄存器或者内存字单元中,计算结果默认高位放在DX,低位放在AX中。

  我们来假设一下,如果是8位和16位相乘,CPU怎么执行:
  如果是8位和16位相乘,那么假设你的8位存储在AH中,16位存储在一个16位的寄存器或者内存字单元中(我们假设存储在BX中),在CPU执行到语句:MUL BX 的时候,那么此时CPU看到是在与一个16位数相乘(因为BX是16位寄存器,存储的是16位的数),CPU就会默认将AX中的16位数与BX的数相乘,而不是与AH中的数相乘,这样不就混乱了吗?
  如果是8位和16位相乘,反之假设你的16位存储在AX中,8位存储在一个8位的寄存器或者内存字节单元中,,,,,,,,,,,最后CPU还是会如上一个假设那样瞎计算,楼主也会很郁闷啊~
  所以,两个相乘的数,要么都是8位,要么都是16位,本质上这是我们人和CPU的一个计算约定,CPU只会按照人定的规则办事。
温馨提示:内容为网友见解,仅供参考
无其他回答

汇编语言中的乘法指令为什么两数位数相同
所以,两个相乘的数,要么都是8位,要么都是16位,本质上这是我们人和CPU的一个计算约定,CPU只会按照人定的规则办事。

请问汇编语言中运算类指令,两个操作数的位数必须一样吗?可以8位+16位...
乘法也一样,(a+100A + b) x c = 100A*c + b*c,分开相乘,结果相加即可。

汇编语言里的IMUL乘法指令是怎么乘的?
看你的累加器是八位的还是十六位的,你的(A)=50H (B)=04H MUL AB是八位的两数相乘结果为140h,低八位在累加器A(=40h),多出的在寄存器B中(这里=1)。如果a=0feh,b=11h,则MUL AB后,a=0deh,b=10h。

ARM汇编之乘法指令
第一类是32位乘法指令,其结果为32位。此类指令包括MUL和MLA。MUL指令直接执行两个32位整数的乘法运算,生成一个32位的结果。MLA指令则更进一步,它不仅执行乘法,还允许直接对结果进行累加操作。接着是64位乘法指令,结果为64位。它们分别是SMULL和SMLAL。SMULL指令专为执行64位整数的乘法而设计,生成一...

汇编语言问题mul指令
乘法指令的功能是将A和B中两个无符号8位二进制数相乘,所得的16位积的低8位存于A中,高8位存于B中。如果乘积大于255,即高位B不为0,则OV置1;否则OV清0,CY总是清0。MUL指令有三种格式:第一种是将8位的操作数于al相乘。第二种是将16位的操作数与ax相乘; 第三种是将32位的操作数与...

汇编语言两数相乘
AAM实际上是将两个一位数的非压缩BCD码相乘后得到的乘积进行二化十的转换,十位数放在AH中,个位数放在AL中,那么AX中就是乘积的非压缩BCD码。注意:如果是两个ASCII码数相乘,要先将它们转换成非压缩BCD码。AAD的调整方法为:执行除法指令之前,对AX中的非压缩BCD码(被除数)执行:(AL)←(AH)...

在汇编语言中的符号扩展是什么意思???
这个高位是否为低位的符号扩展指的是结果的位数,比如计算有符号数1*(-1),结果为AX=FFFF,DX=FFFF,这样DX就称为AX的符号扩展,因为,-1在字的长度下也是FFFF,这个DX是可以不要的,结果其实只用AX就能表示了;还有1*1,结果为AX=0001,DX=0000,DX也是可以不要的;但如果是0FFF*0FFF的话,DX就不能...

汇编语言中乘以8与左移3的区别
乘法的话呢 可能会产生益处,影响OF的值的,左移就不会影响OF。而且如果是有符号乘法的话,最高位那个表示数字正负的符号不会改变,而位移可能改变第一位的

汇编语言中为什么要用移位指令代替乘除法指令
从效率上看,使用移位指令有更高的效率,因为移位指令占2个机器周期,而乘除法指令占4个机器周期。从硬件上看,移位对硬件更容易实现,所以会用移位,移一位就乘2,这种乘法当然考虑移位了

汇编语言那些指令会改变标志位?
OF若两个数符号相反,而结果的符号与减数相同则OF=1.否则OF=0.乘法指令:MUL、IMUL MUL:如果乘积高一半为0,则CF和OF位均为0,否则CF和OF均为1.IMUL:如果高一半是低一半符号的扩展,则CF位和OF位均为0,否则就均为1.除法指令:DIV、IDIV 对所有条件位均无定义。逻辑指令:AND、OR、NOT...

相似回答