- 论坛徽章:
- 3
|
.section .data
format1:
.ascii "%%eax : %d\n"
.ascii "%%ebx : %d\n"
.byte 0
format2:
.ascii "result : %d\n"
.byte 0
.section .text
.globl add1
add1:
/* popl %ebx //这里就是取出靠压栈传进来的两个参数,但是出问题,就改成下面的mov取值了
popl %eax*/
movl 8(%esp), %ebx
movl 4(%esp), %eax //取出两个值,后相加放入%eax
addl %ebx, %eax
/* pushl %eax*/
// movl %eax, (%esp) //再把返回值放回栈中,前边试过pop、push来代替这个,不过出现莫名其妙的错误,所以换了这个
ret
.globl _start
_start:
pushl $4
pushl $10
call add1
/* popl %eax*/
// movl (%esp), %eax //调用add1结束,把在esp栈顶存放在返回值取出
addl $8, %esp //然后add1的两个参数从栈中取出
pushl %eax //为调用printf传参
pushl $format2
call printf
addl $8, %esp
pushl $0
call exit |
|