我是一名裝配編程的新手,在裝有GNU彙編程序v2.20.1的Ubuntu x86_64桌面上工作通過Programming Ground Up。x86裝配pushl/popl不能與「錯誤:後綴或操作數無效」工作
我已經能夠組裝/鏈接執行我的代碼,直到我開始使用pushl/popl指令來操作堆棧。下面的代碼無法組裝:
.section .data # empty
.section .text
.globl _start
_start:
pushl $1 # push the value 1 onto the stack
popl %eax # pop 1 off the stack and into the %eax register
int $0x80 # exit the program with exit code '1'
使用 「爲test.s -o test.o」,出現在終端上這些錯誤並test.o不創建:
test.s: Assembler messages:
test.s:9: Error: suffix or operands invalid for 'push'
test.s:10: Error: suffix or operands invalid for 'popl'
I」我檢查了文檔,我用pushl和popl的操作數是有效的。這不完全是一個調試問題 - 所以我的代碼有什麼問題?還是我的彙編程序?
這看起來像32位代碼,但您正試圖組裝64位(x86_64上的默認設置)。傳遞適當的標誌以構建爲32位,例如'as -arch i386 ...' – 2011-03-30 11:14:57
我相信Paul有正確的答案。你可能需要--32作爲。 – 2011-03-30 11:15:53
我提到了我用來學習x86彙編的教科書(_Programming Ground Up_似乎是一個非常流行的免費教材) - 是否還有一個類似流行的x86/64位教程(免費並不重要)新手? 我意識到這可能是一個太大的問題在這裏問,但32位和64位作爲第一次使用匯編編程的經驗有什麼區別? – maxm 2011-03-30 15:16:03