【问题标题】:how to push a range of memory to the stack in asm?如何将一系列内存推送到asm中的堆栈?
【发布时间】:2012-02-12 20:06:24
【问题描述】:

是否可以选择将一定范围的内存压入堆栈?

foo resd x 可以保留 x 个双字,地址是连续的。

是否可以将地址foo 到地址foo+(4*x) 的所有双字推入堆栈?

【问题讨论】:

    标签: memory assembly x86 stack nasm


    【解决方案1】:

    这取决于 CPU 并且您没有指定它(我猜它是 x86,因为resd 是 nasm 保留内存的方式,而 nasm 仅适用于 x86)。

    没有 x86 指令可以将任意数量的(d/q)words 压入堆栈。您可以在一个循环中一一推送其中的几个。或者您可以在堆栈上保留空间(通过从(e/r)sp 中减去),然后使用movrep movsb/w/d/q 复制数据。

    【讨论】:

    • 好吧,可惜了。我希望是这样的:push DWORD*x foo 但谢谢:)
    【解决方案2】:

    这不能由汇编器在编译时完成。堆栈操作需要在运行时由代码完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-26
      • 2013-05-26
      • 1970-01-01
      • 2014-04-28
      • 2011-11-12
      • 1970-01-01
      • 2021-11-07
      • 2022-01-16
      相关资源
      最近更新 更多