2017-08-05 71 views
0

我在Debian 9.這些都是錯誤:NASM 「錯誤:操作數後逗號,冒號,裝飾或行結束預期」

[email protected]:~/Assembly/sandbox$ nasm -f elf -g -F stabs sandbox.asm 
sandbox.asm:8: error: comma, colon, decorator or end of line expected after operand 
sandbox.asm:9: error: comma, colon, decorator or end of line expected after operand 
sandbox.asm:11: error: comma, colon, decorator or end of line expected after operand 
sandbox.asm:12: error: comma, colon, decorator or end of line expected after operand 

這是代碼:

section .data 
section .text 

global _start 

_start: 
    nop 
    mov eax 10 
    mov ebx 12 

    mov eax 1 
    mov ebx 0 
    int 80H 
    nop 

section .bss 

導致這些錯誤的問題是什麼,我該如何解決?

如果我用下面的代碼,我修復操作數之間的逗號,我收到了不同的錯誤:

section .data 
section .text 

    global_start 

_start: 
    nop 
    mov eax,10 
    mov ebx,12 

    mov eax,1 
    mov ebx,0 
    int 80H 
    nop 

section .bss 

我得到的錯誤是:

sandbox.asm:4: warning: label alone on a line without a colon might be in error 

爲什麼我得到這個錯誤,我該如何解決它?

+0

在你描述爲「正確」的代碼中,有'global_start',這看起來不正確。正如我在答覆中所寫的那樣,它應該是'global _start'。在更正之後,當您嘗試編譯代碼時,是否會遇到同樣的錯誤? –

回答

2

我假設有缺少空間,它應該是:

在第4行

我也懷疑十六進制常數可能是不正確的格式,因爲缺少0前綴

global _start 

,但只要數字以數字開頭,應該可以,因爲邁克爾佩奇在評論中提及(並根據NASM的文檔可在此獲得:http://www.nasm.us/doc/nasmdoc3.html)。

+0

我的錯誤是,我發佈了新代碼,舊代碼在mnemonics.sorry.global _start出錯後也缺少逗號。 – Andrea

+1

沒有必要在這個'int 080h'前加一個額外的零。 'int 80h'很好。如果第一個數字不在0和9之間,則只需將開頭零置於開頭。如果數字爲A0十六進制,則必須爲'0A0h',因爲十六進制數字A不在0和9之間。 –

+0

是的,你說得對,我會糾正這一點。 –