x86 使用 32 位程序汇编 64 位值

问题描述 投票:0回答:1

如果我们将两个非常大的 32 位值相乘,结果可能会出现在寄存器 edx 和 eax 中。 edx 持有较高位。

  • 我们如何对这些 64 位值进行运算并将其打印到显示器上?

我认为存储它们只需保留两个相邻的 32 位内存空间,然后在下一个 32 位空间中先存储 eax,然后再存储 edx。因此,使用小尾数法,我们将在两个 32 位内存空间中首先保存 eax 中的最低位,最后保存 edx 中的最高位。

  • 这样对吗?
  • 如果是的话,我们必须进行哪些抽象思维才能对数字进行操作?
  • 还可以使用 32 位 printf 函数以某种方式仅使用原始说明符(例如“%d”、“%u”或“%x”)来显示值吗?还是我们必须自己制作组装过程来打印值?
assembly x86 nasm
1个回答
0
投票

您关于存储 EDX:EAX 中的 64 位值的观察是正确的。

更简单的进一步计算是加法和减法:

add  eax, ebx    ; EDX:EAX + ECX:EBX
adc  edx, ecx

sub  eax, ebx    ; EDX:EAX - ECX:EBX
sbb  edx, ecx

我想我真正想知道的是当我们使用 32 位寄存器时 printf 如何打印 64 位值?在汇编代码中会是什么样子?人们如何自己创建该功能?

从您的评论中可以清楚地看出,您确实想自己将 64 位数字 EDX:EAX 转换为字符串。
我的回答在 如何在 Assembly 中的 EDX:EAX 中打印乘法结果展示了如何做到这一点。
有关转换的一般方法的更多信息,请务必阅读那里提供链接的答案。不要因为提到(旧的)DOS 而感到害怕。许多原则不会随着技术的发展而改变那么多......

© www.soinside.com 2019 - 2024. All rights reserved.