十万火急!!汇编语言的问题

本人不会汇编语言,但是有C语言基础,麻烦各位帮我解释一下下面的语句#args.s.text.globlstart_start:popl%ecx#argcvnext:pop... 本人不会汇编语言,但是有C语言基础,麻烦各位帮我解释一下下面的语句
# args.s
.text
.globl start
_start:
popl %ecx # argc
vnext:
popl %ecx # argv
test %ecx, %ecx # 空指针表明结束
jz exit
movl %ecx, %ebx
xorl %edx, %edx
strlen:
movb (%ebx), %al
inc %edx
inc %ebx
test %al, %al
jnz strlen
movb $10, -1(%ebx)
movl $4, %eax # 系统调用号(sys_write)
movl $1, %ebx # 文件描述符(stdout)
int $0x80
jmp vnext
exit:
movl $1,%eax # 系统调用号(sys_exit)
xorl %ebx, %ebx # 退出代码
int $0x80

ret
急急急
展开
 我来答
cknight123
2010-03-18 · TA获得超过964个赞
知道小有建树答主
回答量:532
采纳率:0%
帮助的人:626万
展开全部
gas汇编指令 你可以google对照看下- -
我学的Intel汇编那本书快2星期了,大部分指令和这个不同。。。。

我把知道的先说出来,希望对你有用,如果有兴趣你也去看书吧,至少这些基础命令和概念大概1~2星期可以掌握掌握。

popl %ecx ----->出栈 到ecx 寄存器中。
test %ecx, %ecx ------>就是一个资深‘与’运算,但是不改变值,就是为了下面语句'jz'做判断用的

jz exit ------> 如果上面‘与’运算为0,标示空,则标志位 零位(z) 会被置位,jz意思就是如果z被置位则跳转到 exit: 出开始执行下面语句。

movl %ecx, %ebx 将ecx寄存器中的值复制给 ebx

xorl %edx, %edx 是edx资深 做一个 ‘异或’运算,相同位为0,所以edx被初始化为0了

movb (%ebx), %al 将ebx中的一个字节(8位)复制给 al(al是eax的低8位)

inc %edx edx值增加1
inc %ebx
test %al, %al 不改变值的‘与’运算,al若为0则 z被置位
jnz strlen 如果 z没有置位则跳转到 strlen处开始运行
movb $10, -1(%ebx)
movl $4, %eax # 系统调用号(sys_write)

int $0x80
jmp vnext 直接跳转到 vnext:处开始运行

exit:
movl $1,%eax # 系统调用号(sys_exit)
xorl %ebx, %ebx # 退出代码
int $0x80

ret ----> 这个就当做是c语言函数里的 return
益昳62
2010-03-18 · 超过15用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:24.6万
展开全部
这个代码都看得不是很清楚啊,也不像是正规的汇编语言吧,建议你看看汇编方面的书,对这个就会有一定的了解了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式