当前位置: 技术问答>linux和unix
求助关于AT&T汇编问题,在线等ing,急呀
来源: 互联网 发布时间:2016-10-04
本文导语: 在AT&T汇编中要如何使用scanf?假设要用户输入一组整型list然后输出这个list具体要怎么写呀, 输入后的list被储存到什么地方了,是stack还是寄存器?谁能提供一个最简单的例子呀,书都翻烂了也没见到一个例子= = 还...
在AT&T汇编中要如何使用scanf?假设要用户输入一组整型list然后输出这个list具体要怎么写呀,
输入后的list被储存到什么地方了,是stack还是寄存器?谁能提供一个最简单的例子呀,书都翻烂了也没见到一个例子= =
还有怎么用栈来传递参数,假设内存中有list【1,2,3,4】怎样用参数4(list的size)和 0(list中第一元素的地址)来读取它并输出呢。
输入后的list被储存到什么地方了,是stack还是寄存器?谁能提供一个最简单的例子呀,书都翻烂了也没见到一个例子= =
还有怎么用栈来传递参数,假设内存中有list【1,2,3,4】怎样用参数4(list的size)和 0(list中第一元素的地址)来读取它并输出呢。
|
用C写个 然后看它的汇编代码 ?
|
太有才了!
下面能满足楼主的需要吗?
.file "test.c"
.section .rodata
.LC0:
.string "%d"
.LC1:
.string "%dn"
.text
.globl main
.type main,@function
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
movl $0, -4(%ebp)
.L2:
subl $8, %esp
leal -4(%ebp), %eax
pushl %eax
pushl $.LC0
call scanf
addl $16, %esp
subl $8, %esp
pushl -4(%ebp)
pushl $.LC1
call printf
addl $16, %esp
jmp .L2
.Lfe1:
.size main,.Lfe1-main
.ident "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"
对应C代码:
#include
int main(int argc, char *argv[])
{
int c = 0;
while(1){
scanf("%d", &c);
printf("%dn", c);
}
return 0;
}