1
我有這個「.s」文件,寫在AT & T程序集中。無法在Win上編譯與Cygwin的彙編(.s)代碼
.globl interleave
interleave:
pushl %ebx
pushl %esi
pushl %edi
movl 16(%esp), %ebx #a
movl 20(%esp), %esi #b
movl 24(%esp), %edi #c
D: movb (%ebx), %cl
testb %cl, %cl
jz W
movb %cl, (%edi) #*c
incl %edi
incl %ebx
T: movb (%esi), %dl
testb %dl, %dl
jz W
movb %dl, (%edi) #*c
incl %edi
incl %esi
W: orb %cl,%dl
jz E
#movb $0, %al
jmp D
E: movb $0, (%edi)
popl %edi
popl %esi
popl %ebx
ret
我想有以下主要文件,cygwin的編譯它在Windows 10,但它不工作。
void interleave(const char* a, const char* b, char* c) ;
int main(int argc, char const *argv[]){
const char* a = "car";
const char* b = "old";
char c[] = "";
interleave(a,b,c);
printf("%s (expected coalrd)\n", c);
return 0;}
隨着gcc
我得到es1B.s:3: Error: invalid instruction suffix for push
隨着gcc -m32
我得到collect2: error: ld returned 1 exit status
我甚至試圖與i686-w64-mingw32-gcc
編譯它在32位,但我得到undefined reference to interleave
我能編譯它並在linux上運行它,使用gcc -m32
,b有沒有辦法讓這個工作在Windows上?
感謝
您錯過了'.globl interleave'。 – Jester
在Windows上,cdecl函數的符號名稱必須以下劃線作爲前綴。也許這就是爲什麼你得到一個「未定義的參考」錯誤? – fuz
@fuz非常感謝,我不知道!它現在有效! :) – Ford1892