关于段错误的一个问题?
我想实现一个程序,把命令行参数显示到屏幕上,具体的汇编程序如下:程序代码:
#comm.s .section .data cmd_tb1: #分配内存,存放执行命令行参数的指针,最多有可存放十个 .rept 10 .long 0 .endr .section .text .globl _start _start: movl (%esp), %ecx cmpl $10, %ecx #如果命令行参数大于10,则退出。 jg _exit movl $1, %esi movl $0, %edi store_loop: #复制命令行参数指针到cmd_tb1 movl (%esp, %esi, 4), %eax movl %eax, cmd_tb1( , %edi, 4) incl %esi incl %edi loop store_loop movl %edi, %ecx movl $0, %esi print_loop: movl cmd_tb1(, %esi, 4), %eax pushl %eax call puts #调用C函数显示 popl %eax incl %esi loop print_loop _exit: pushl $0 call exit
编译和联接都没有出现问题,具体的命令如下:
as -o comm.o comm.s ld -o comm -dynamic-linker /lib/ld-linux.so.2 -lc comm.o
可是在运行的时候确提示段错误,不知道错在哪里,望高手指点。
我的gcc版本为:4.1.2 20070502 (Red Hat 4.1.2-12)