【发布时间】:2020-05-30 15:04:16
【问题描述】:
我需要在 asm 8086 中编写一个类似 b=a/6 但没有 DIV 指令的程序。我知道如何使用 SAR,但只有 2、4、8、16...
mov ax,a
sar ax,1 ;//div a by 2
mov b,ax
我的问题是如何将 div 设为 6?
【问题讨论】:
-
您可以使用减法并计算归零所需的次数,例如。 30/6=5 和 30-6-6-6-6-6=0 所以对于 30,你必须 5 次减去 6 才能达到零
-
对于一个固定的(编译时常数)除数,有一个使用乘法来进行精确整数除法的定点技巧:Why does GCC use multiplication by a strange number in implementing integer division?。另外,您要签名还是未签名的部门?
div是无符号的,sar是有符号的(对于负数,舍入方式与idiv不同)
标签: assembly intel x86-16 emu8086 integer-division