繁体   English   中英

汇编:16位分区

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM