2013-07-01 27 views
0

我正在尋找一個代碼示例,用於將值與gcc中的內聯彙編進行比較。我需要爲asm代碼賦值。我試過一些例子,他們沒有正常工作。 總是有錯誤,或者我不理解結果。將值與內聯彙編器進行比較

我只需要比較兩個值並返回結果。

movl my_val, %eax 
    cmpl %eax,$0xfffffffa 
    je equal 
    equal: 
    movl $0xfffffffa,my_val 
+0

我們不能做很多這一點。給我們整個功能,k t。 – TonyK

回答

1

這一方案將比較來自argv[1]採取value$0x1在我的AMD64,所以你可能要修復它在你的架構工作:

#include <stdio.h> 

int main(int argc, char* argv[]) { 

    int value, result; 
    value = atoi(argv[1]); 
    result = 0; 

    __asm__ ("xor $0x1,%%eax;\n" 
    "jnz end;\n" 
    "movl $0xfffffffa,%%ebx;\n" 
    "end:\n" 
    :"=b"(result) 
    :"a"(value) 
); 

    if (result) { 
    printf("Equals!\n"); 
    } 

    return 0; 
} 

現在編譯並運行它:

$ gcc -o comp comp.c 
$ ./comp 0 
$ ./comp 1 
Equals! 

參考:

+0

超級,效果很好。謝謝! –

+0

這有一個未聲明的輸入'%ebx',並修改'%eax'而不聲明它是輸出,因此是不安全的。 –