|
|
发表于 2005-6-25 12:09:57
|
显示全部楼层
Post by caicheng
- # 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
复制代码
问题在程序中
其实,strlen 这个标号已经说得很清楚了,是计算字符串长度,并将其放在 edx 中,至于为什么放在这个寄存器里面,可以参考内核关于系统调用中参数的处理。 |
|