我有以下代码来计算一个完美运行的数字的平方:
.section .data
.section .text
.globl _start
.globl square
_start:
pushl $10
call square
addl $4, %esp
movl %eax, %ebx
movl $1, %eax
int $0x80
.type square,@function
square:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
imull %eax, %eax
end_square:
movl %ebp, %esp
popl %ebp
ret
我想square
从另一个名为square_test.s
. 这是我的尝试:
.section .data
.section .text
.globl _start
_start:
pushl $12
call square
addl $4, %esp
movl %eax, %ebx
movl $1, %eax
int $0x80
但是当链接它时会抛出这个错误:
$ as --32 square_test.s -o square_test.o
$ as --32 square.s -o square.o
$ ld -m elf_i386 square.o square_test.o -o square_test
square_test.o: In function `_start':
(.text+0x0): multiple definition of `_start'
square.o:(.text+0x0): first defined here
我应该如何解决这个问题?
感谢上面的评论,我终于让它工作了。这是两个文件:
# file name: isolated_square.s
.section .data
.section .text
.globl square
.type square,@function
square:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
imull %eax, %eax
end_square:
movl %ebp, %esp
popl %ebp
ret
这是另一个文件:
# file name: square_test.s
.section .data
.section .text
.globl _start
_start:
pushl $12
call square
addl $4, %esp
movl %eax, %ebx
movl $1, %eax
int $0x80
这就是您需要执行它的方式:
$ as --32 isolated_square.s -o isolated_square.o
$ as --32 square_test.s -o square_test.o
$ ld -m elf_i386 isolated_square.o square_test.o -o square_test
$ ./square_test
$ echo $?
144
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句