2015-06-13 79 views
4

我正在學習ASM,我遇到了一個小問題。 我無法在「section.data」中「聲明」多個字符串。 我想是這樣的:OSX 64位上的NASM問題

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 

這個功能應該打印在標準輸出「測試1測試2」,但它不工作。 結果是:

test2 

它僅適用於存儲在最後一個字符串!如果有人知道爲什麼,請告訴我!

+2

讓我猜... Nasm-2.11.08?它具有'-f macho64'的錯誤。回到2.11.06。 2.11.09應該很快就會解決,如果一切順利的話。這些事情發生... :( –

+0

該死的,謝謝你... –

+0

@FrankKotler - 這是神祕的知識。(擴大?)的答案可能有助於其他人。 –

回答

2

如果您使用的是nasm 2.11.08,則有一個問題記錄here與數據部分中的多個條目組合的相對尋址有關。

您可以確定兩件事情中的一件(或兩件)。

首先,你可以看看生成的彙編代碼來調查實際上是。這可能是最終的選擇,因爲您可以確切地看到CPU將運行的是什麼。其次,你可以用之前的版本nasm來測試你的代碼,看看問題是否消失。如果是這樣,那就是間接證據,它是2.11.08中的錯誤導致你的問題。