2017-09-18 49 views
0

使用IFDEF的我有以下彙編文件mov.s氣體彙編語言

.text 
    .macro test_3 
    and $3,%eax 
    .endm 

    movz: 
    movzb %al,%ax 
    movzb (%eax),%ax 
    movzb %al,%eax 
     movzb (%eax),%eax 
    .ifdef test_3 
     movzb33 %al,%rax 
     movzb (%rax),%rax 
.endif 

命令as -o dump.o movz

在這段代碼我想用匯編語言測試ifdef所以我定義的宏test_3。

根據我的理解,當我使用匯編程序時,應該打印消息 Error: no such instruction: 'movzb33 %al,%rax'但它不在ifdef之內,所以問題是什麼?

+0

請閱讀您的特定彙編程序的文檔(是[nasm](http://www.nasm.us/)還是[gas](https://sourceware.org/binutils/docs-2.28/as/index)的.html)?)。 '.ifdef'是一個指令,而不是指令。查看生成的目標文件(例如,在Linux上使用'readelf'或'objdump') –

+0

我知道這件事 – Akshay

+0

你是否仔細閱讀過文檔(可能是幾次)? –

回答

0

.ifdef檢查符號是否定義,它不測試宏。在GNU AS和許多其他彙編器中,只能在允許指令的地方使用宏。

+1

另外,如果您需要* C預處理器功能,請使用CPP宏。 'gcc -c foo.S'將首先通過CPP來運行它,所以你可以使用'#include'和'#ifdef'。 –