[英]Assembly: 16-bit Division
我还是装配新手,我还不知道装配中的许多命令代码。 我想在16位寄存器中进行除法。 我想打印其内容。 我知道我需要将寄存器的内容转换为ASCII进行打印,但同样,我的问题就是除法。 请帮我。
例如,cx的内容是2012(整数)。 我该怎么办?
mov ax, cx
mov bx, 1000
idiv bx
上面的代码是错的吧?
查看此参考 (搜索idiv)
idiv指令将64位整数EDX:EAX(通过将EDX视为最重要的四个字节构造,EAX作为最不重要的四个字节构造)的内容除以指定的操作数值。 除法的商结果存储在EAX中,而余数存放在EDX中。 语法idiv idiv
例子
idiv ebx - 用EBX的内容划分EDX:EAX的内容。 将商放在EAX中,其余的放在EDX中。 idiv DWORD PTR [var] - 将存储在内存位置var的32位值除以EDX:EAS的内容。 将商放在EAX中,其余的放在EDX中。
当然,既然你使用的是16位,那么将所有指定的位值切成两半,并将每个寄存器的E降低,它就完全相同
编辑:我注意到这是签名的分区idiv
,答案相应编辑。
上面的代码在一个方面是错误的: ax
没有符号扩展到dx:ax
。
只需在idiv bx
之前添加cwd
(将单词转换为双字),然后就可以了。 商将在ax
,余数将在dx
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.