无法在 Win 上使用 Cygwin 编译汇编 (.s) 代码
Can not compile Assembly (.s) code with Cygwin on Win
我有这个“.s”文件,是用 AT&T 程序集编写的。
.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 [=10=], %al
jmp D
E: movb [=10=], (%edi)
popl %edi
popl %esi
popl %ebx
ret
我想在 windows 10 上用 cygwin 和以下 main 文件编译它,但它不起作用.
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
编译它并 运行 它,但是有没有办法让它在 windows 上工作?
谢谢
通过在评论中建议的函数名称前添加 下划线 解决:
.globl _interleave
_interleave:
...
现在可以使用 i686-w64-mingw32-gcc
进行编译。
我有这个“.s”文件,是用 AT&T 程序集编写的。
.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 [=10=], %al
jmp D
E: movb [=10=], (%edi)
popl %edi
popl %esi
popl %ebx
ret
我想在 windows 10 上用 cygwin 和以下 main 文件编译它,但它不起作用.
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
编译它并 运行 它,但是有没有办法让它在 windows 上工作?
谢谢
通过在评论中建议的函数名称前添加 下划线 解决:
.globl _interleave
_interleave:
...
现在可以使用 i686-w64-mingw32-gcc
进行编译。