关于8086汇编处理有符号乘除的问题
都知道,汇编只能处理有符号运算,无符号的会转换为有符号,加减法运算可以通过补码相加得到,,而乘除呢?
1:如果将无符号乘法当成有符号乘易做图引发错误的,这怎么解释的(除法是乘法的逆运算,这里就不问除法了)
2:就例如,无符号运算:254*1=254,转变为汇编有符号处理:-2*1=-2,结果却不对啊,能解释下mul和imul怎么在debug中怎么实现的么
追问:我用mul处理第二个算式:-2*1,mul不是处理无符号的么恩,再问下,就是mul和imul是如何实现的?因为汇编只能处理有符号的!
答案:1:如果将无符号乘法当成有符号乘易做图引发错误的,这怎么解释的(除法是乘法的逆运算,这里就不问除法了)
--用错了乘法指令,结果必然错误,不用解释。
2:就例如,无符号运算:254*1=254,转变为汇编有符号处理:-2*1=-2,结果却不对啊,
--怎么不对呀?
其他:1、imul会把无符号数的最高bit当成符号位,254变成-2计算,所以会引发值不等同于无符号mul的运算结果
2、以254为例,就是限定了数据是1个字节宽度。
mul imul指令以操作符的宽度决定计算宽度
mul bl ; 8bit宽度
mul bx ; 16bit宽度
mul ebx ; 32bit宽度
mul rbx ; 64bit宽度
要想把254看成-2,就必须用有符号的8bit宽度
mov bl 254
imul bl
上一个:pascal石材切割
下一个:请教汇编高手