問題是,當程序步入行:stosb時,它將顯示一個錯誤:「程序接收到的信號SIGSEGV,分段錯誤。我不知道爲什麼,有什麼想法?gcc中的擴展asm:執行「stosb」時的分段錯誤
在ubuntu x86_64下,使用「gcc -o test test.c」進行編譯和鏈接。
#include <stdio.h>
static inline char * strcpy(char * dest,const char *src)
{
int d0, d1, d2;
__asm__ __volatile__("1:\tlodsb\n\t"
"stosb\n\t"
"testb %%al,%%al\n\t"
"jne 1b"
: "=&S" (d0), "=&D" (d1), "=&a" (d2)
: "0" (src),"1" (dest)
: "memory");
return dest;
}
int main(void) {
char* src_main = "Hello_src";
char* dest_main = "Hello_des";
strcpy(dest_main, src_main);
puts(src_main);
puts(dest_main);
return 0;
}
謝謝。這只是一個練習。我是新擴展裝配。 – Searene 2014-10-03 12:48:49