| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1142 人关注过本帖
标题:关于段错误的一个问题?
只看楼主 加入收藏
smallcat
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-2-20
收藏
 问题点数:0 回复次数:1 
关于段错误的一个问题?
我想实现一个程序,把命令行参数显示到屏幕上,具体的汇编程序如下:
程序代码:
#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)
搜索更多相关主题的帖子: edi movl 内存 esi loop 
2008-03-15 10:49
Ethip
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:771
专家分:0
注 册:2008-1-18
收藏
得分:0 
回复 1# 的帖子
搞汇编?太强了...
2008-03-15 13:42
快速回复:关于段错误的一个问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016046 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved