弹出协处理器寄存器到特定地址

时间:2014-09-16 01:15:17

标签: assembly x86 nasm

我正在尝试学习装配,我正在使用NASM。现在我陷入困境,我想从协处理器堆栈(使用FISTP)弹出一个内存位置,该地址是用LEA计算的。所以基本上有这两个指令:

lea eax, [ebp - 4] ; EAX = The address where I want to write to
fistp  dword [eax] ; (?)

我所看到的是ST0的内容写入EAX,但不会写入EAX中包含的地址。 怎么能实现这一目标?

一个例子非常有用,我一直在研究手册和参考文献,但到目前为止,对我来说这一切似乎都非常神秘。汇编程序,架构,注册......低级别的所有内容仍然难以阅读和理解。

1 个答案:

答案 0 :(得分:1)

你有些困惑。 FISTP dword [eax]将值存储在eax寄存器中指定的地址。在汇编程序中编写一个小程序,并使用调试器逐步执行它,直接看到它。特别是,实际上很难将FP寄存器值放入GP寄存器,而无需通过存储器位置。

您可以一步计算一个地址,然后如您所示在另一个步骤中使用它。但是x86寻址模式可以在单个指令中完成很多工作。这条单指令可以完成你们两个人的工作:

    fistp dword [ebp -4 ]

仔细阅读英特尔参考手册中的寻址模式是值得的。

坦率地说,值得花一天时间浏览Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals(几卷)以了解其中的内容,以便了解您可以了解更多信息以及在哪里查看。他们甚至包含非常好的概述。不要被吓倒;坚持下去,它将带来丰厚的回报。