作业帮 > 综合 > 作业

关于8086汇编处理有符号乘除的问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/25 21:24:45
关于8086汇编处理有符号乘除的问题
都知道,汇编只能处理有符号运算,无符号的会转换为有符号,加减法运算可以通过补码相加得到,而乘除呢?
1:如果将无符号乘法当成有符号乘法会引发错误的,这怎么解释的(除法是乘法的逆运算,这里就不问除法了)
2:就例如,无符号运算:254*1=254,转变为汇编有符号处理:-2*1=-2,结果却不对啊,能解释下mul和imul怎么在debug中怎么实现的么
1:如果将无符号乘法当成有符号乘法会引发错误的,这怎么解释的(除法是乘法的逆运算,这里就不问除法了)
--用错了乘法指令,结果必然错误,
2:就例如,无符号运算:254*1=254,转变为汇编有符号处理:-2*1=-2,结果却不对啊,
--怎么不对呀?
再问: 我用mul处理第二个算式:-2*1,mul不是处理无符号的么
再答: 用mul处理第二个算式:-2*1,mul不是处理无符号的么。。。 --用错了指令,结果当然不对。 --结果不对,这是很正常的,不用怀疑。
再问: 恩,再问下,就是mul和imul是如何实现的?因为汇编只能处理有符号的!
再答: 因为汇编只能处理有符号的!--不是吧,无符号数,也能处理。 mul和imul是如何实现的? mul 是无符号数的乘法指令、imul 是有符号数的乘法指令。 你的数字,到底是有符号数,还是无符号数?这个问题,你自己应该清楚。 按照数字的类型,正确选择一种指令,编写在程序里面,即可实现你所要求的乘法。 前面,你说的:““我用mul处理第二个算式:-2*1,...”” 这明显是用错了指令,如果用 imul 来处理,就能实现你的要求。