【问题标题】:NASM issue on OSX 64-bit [duplicate]OSX 64位上的NASM问题[重复]
【发布时间】:2015-08-29 03:55:51
【问题描述】:

我正在学习 ASM,但遇到了一个小问题。 我不能在“section.data”中“声明”多个字符串。 我正在尝试这样的事情:

section .data
    string1 db "test1 ", 0;
    string2 db "test2 ", 0;
section .text
    global _test
    extern _puts
    _test:
         lea rdi, [rel string1]
         call _puts
         lea rdi, [rel string2]
         call _puts
         ret

这个函数应该在 STDOUT 上打印“test1 test2”,但它不起作用。 结果是:

test2

它只适用于存储的最后一个字符串!如果有人知道原因,请告诉我!

【问题讨论】:

  • 让我猜猜... Nasm-2.11.08? -f macho64 有一个严重的错误。回到 2.11.06。 2.11.09 应该很快就会出现并且应该修复它......如果一切顺利的话。这些事情发生了...... :(
  • @FrankKotler - 这是神秘的知识。 (扩展?)答案可能对其他人有所帮助。
  • 我作为开发人员已经有一段时间没有“活跃”了,但我仍然在名单上。在这里向下滚动一点,对出了什么问题有一些解释。 sourceforge.net/p/nasm/mailman/nasm-devel

标签: macos assembly 64-bit nasm


【解决方案1】:

如果您使用的是nasm 2.11.08,则记录了here 的一个问题,与数据部分中的多个条目相结合的相对寻址有关。

你可以做两件事中的一件(或两件)来确定。

首先,您可以查看生成的汇编代码,以了解它实际上生成了什么。这可能是最终的选择,因为您可以准确地看到 CPU 将运行什么。

其次,您可以使用nasm 的早期 版本测试您的代码,看看问题是否消失。如果是这样,这就是 2.11.08 中的错误导致您的问题的间接证据。

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 2012-03-07
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2011-11-19
    相关资源
    最近更新 更多