2016-03-27 8 views
1

NASMでマクロを使用して、いくつかの繰り返し機能を定義しています。私は、次のコードを使用します。NASMマクロで 'wait'というラベルを使用するとエラーが発生する

; System call numbers 
%define SYS_fork 1 
%define SYS_exit 2 
%define SYS_wait 3 

; define the macro 
%macro SYSCALL 1 
global %1 
%1: 
    mov eax, SYS_%1 
    int 64 ; 64 is system call 
    ret 
%endmacro 

; call the macro to setup the functions 
SYSCALL fork 
SYSCALL exit 
SYSCALL wait 

これは名前waitでマクロを作成するための最後の呼び出しを除いて、正常に動作します。それは私にエラーを与える:

error: parser: instruction expected 

waitはnasmの予約語ですか?もしそうなら、まだwaitという関数を定義する方法はありますか?

+2

両方の質問に該当します。 [NASMマニュアル](http://www.nasm.us/doc/nasmdoc3.html)には、_An識別子の前に$が付いていて、予約語ではなく識別子として読み取られることを示していることが示されています。だからあなたのマクロで '%1:'を '$%1:'に変更してください。 –

+0

@MichaelPetch Thxは、私が探していたものでした。 – ErwinM

答えて

1

はい、WAITおよびFWAITは、x86_64命令セットの一部です。私はあなたのコード(Block?HoldUp?)の名前を変更しようとしていると確信しています。