【发布时间】:2012-02-12 20:06:24
【问题描述】:
是否可以选择将一定范围的内存压入堆栈?
foo resd x 可以保留 x 个双字,地址是连续的。
是否可以将地址foo 到地址foo+(4*x) 的所有双字推入堆栈?
【问题讨论】:
标签: memory assembly x86 stack nasm
是否可以选择将一定范围的内存压入堆栈?
foo resd x 可以保留 x 个双字,地址是连续的。
是否可以将地址foo 到地址foo+(4*x) 的所有双字推入堆栈?
【问题讨论】:
标签: memory assembly x86 stack nasm
这取决于 CPU 并且您没有指定它(我猜它是 x86,因为resd 是 nasm 保留内存的方式,而 nasm 仅适用于 x86)。
没有 x86 指令可以将任意数量的(d/q)words 压入堆栈。您可以在一个循环中一一推送其中的几个。或者您可以在堆栈上保留空间(通过从(e/r)sp 中减去),然后使用mov 或rep movsb/w/d/q 复制数据。
【讨论】:
push DWORD*x foo 但谢谢:)
这不能由汇编器在编译时完成。堆栈操作需要在运行时由代码完成。
【讨论】: