NASM 关于 OSX 64 位的问题
NASM issue on OSX 64-bit
我正在学习 ASM,但遇到了一个小问题。
在 "section.data" 中我不能 "declare" 超过一个字符串。
我正在尝试这样的事情:
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,则记录了一个问题 here 与相对寻址结合数据部分中的多个条目有关。
你可以做两件事中的一件(或两件)来确定。
首先,您可以查看生成的汇编代码以调查它实际上 生成的内容。这可能是最终的选择,因为您可以准确地看到 CPU 将是什么 运行。
其次,您可以使用 nasm
的 早期 版本测试您的代码,看看问题是否消失。如果是这样,则间接证明是 2.11.08 中的错误导致了您的问题。
我正在学习 ASM,但遇到了一个小问题。 在 "section.data" 中我不能 "declare" 超过一个字符串。 我正在尝试这样的事情:
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,则记录了一个问题 here 与相对寻址结合数据部分中的多个条目有关。
你可以做两件事中的一件(或两件)来确定。
首先,您可以查看生成的汇编代码以调查它实际上 生成的内容。这可能是最终的选择,因为您可以准确地看到 CPU 将是什么 运行。
其次,您可以使用 nasm
的 早期 版本测试您的代码,看看问题是否消失。如果是这样,则间接证明是 2.11.08 中的错误导致了您的问题。