【问题标题】:x86 Assembly How to print a large number from two registers?x86 Assembly 如何从两个寄存器打印一个大数?
【发布时间】:2014-03-22 22:57:20
【问题描述】:

我有一个数字 8 717 809 4592,它存储在寄存器 edx、eax 中。这些值是这样的 edx = x14 eax = 4c382800 所以基本上 edx 具有高阶而 eax 具有低阶。如何在不使用函数调用的情况下将此数字保存为 ascii 字符串“87178094592”?

【问题讨论】:

  • 如果您不想要函数调用,那么您必须内联将十六进制数字转换为十进制的整个代码序列。
  • 全班似乎都在 SO:stackoverflow.com/questions/22584742/… 上发布这个特殊的作业问题

标签: assembly x86 ascii


【解决方案1】:

使用divedx:eax 除以10 并重复。

【讨论】:

    【解决方案2】:

    您可以将扩展精度除数除以 32 位除数。从 edx = 0 开始,eax = 高位除数,除以 10,高位除数 = eax,eax = 低位除数,除以 10,低位除数 = eax,最低有效位 = 余数 = edx。重复直到除数 = 0。您以相反的顺序获得数字,因此您可能希望将它们推入堆栈,将它们弹出以按正序获得数字,或将数字存储到字符串数组中,从字符串结尾(为尾随零留出空间)。

    【讨论】:

    • 请注意,如果EDX > 10(除法错误)会失败
    • edx 初始化为零,第一次除后,edx 的最大值(除以 10 后的余数)为 9。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2015-04-15
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多