示例代码:
# movtest3.s
.section .data
output:
.asciz "The value is %d\n"
values:
.int 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60
.section .text
.globl _start
_start:
nop
movl $0, %edi
loop:
movl values(, %edi, 4), %eax
pushl %eax
pushl $output
call printf
addl $8, %esp
inc %edi
cmpl $11, %edi
jne loop
movl $0, %ebx
movl $1, %eax
int $0x80
汇编:as --32 movtest3.s -o movtest3.o
链接:ld -o movtest3 movtest3.o -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -L/lib/i386-linux-gnu -lc
当中可能会碰到的几个问题:
如果提示"invalid instruction suffix for `push'",是因为汇编时没有用--32来指定按32位来编译;
如果不加-m elf_i386指定基于32位平台链接,会报错:ld: i386 架构于输入文件 movtest3.o 与 i386:x86-64 输出不兼容;
如果提示ÿ