我正在尋找一個代碼示例,用於將值與gcc中的內聯彙編進行比較。我需要爲asm代碼賦值。我試過一些例子,他們沒有正常工作。 總是有錯誤,或者我不理解結果。將值與內聯彙編器進行比較
我只需要比較兩個值並返回結果。
movl my_val, %eax
cmpl %eax,$0xfffffffa
je equal
equal:
movl $0xfffffffa,my_val
我正在尋找一個代碼示例,用於將值與gcc中的內聯彙編進行比較。我需要爲asm代碼賦值。我試過一些例子,他們沒有正常工作。 總是有錯誤,或者我不理解結果。將值與內聯彙編器進行比較
我只需要比較兩個值並返回結果。
movl my_val, %eax
cmpl %eax,$0xfffffffa
je equal
equal:
movl $0xfffffffa,my_val
這一方案將比較來自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!
參考:
超級,效果很好。謝謝! –
這有一個未聲明的輸入'%ebx',並修改'%eax'而不聲明它是輸出,因此是不安全的。 –
我們不能做很多這一點。給我們整個功能,k t。 – TonyK