Chinaunix

标题: 汇编的问题. [打印本页]

作者: caicheng    时间: 2005-06-24 08:13
标题: 汇编的问题.

  1. # args.s
  2. .text
  3. .globl _start
  4.         
  5. _start:
  6.         popl        %ecx                # argc

  7. vnext:
  8.         popl        %ecx                # argv
  9.         test         %ecx, %ecx      # 空指针表明结束
  10.         jz        exit

  11.         movl        %ecx, %ebx
  12.         xorl        %edx, %edx
  13. strlen:
  14.         movb        (%ebx), %al          ???   从这儿一直到注释有点搞不懂帮忙解释一下
  15.         inc        %edx
  16.         inc        %ebx
  17.         test        %al, %al
  18.         jnz        strlen
  19.         movb        $10, -1(%ebx)

  20.         movl        $4, %eax        # 系统调用号(sys_write)
  21.         movl        $1, %ebx        # 文件描述符(stdout)
  22.         int        $0x80

  23.         jmp        vnext

  24. exit:
  25.         movl        $1,%eax         # 系统调用号(sys_exit)
  26.         xorl        %ebx, %ebx      # 退出代码
  27.         int         $0x80
  28.                
  29.         ret

复制代码

问题在程序中有???处.
作者: yuxh    时间: 2005-06-24 08:29
标题: 汇编的问题.

  1. #用C描述:其中char *ptr(表示%ebx指向的字符串),int n(表示串长)
  2. strlen:
  3.        movb   (%ebx), %al       #al = *ptr;
  4.        inc   %edx                   #n++;
  5.        inc   %ebx                      #ptr++;
  6.        test   %al, %al               #if(al == 0)
  7.         jnz   strlen                     #goto streln;
  8.        movb   $10, -1(%ebx)     #*(ptr-1) = '\n' 表示给串未尾加个'\n'

复制代码

作者: shucx    时间: 2005-06-24 08:59
标题: 汇编的问题.
JNZ    #Jump if not zero,ZF=0
作者: yuxh    时间: 2005-06-24 09:01
标题: 汇编的问题.
哦。不好意思,我打错了。if(al != 0)..
作者: caicheng    时间: 2005-06-24 10:24
标题: 汇编的问题.
每一句的细节是明白了,谢谢yuxh.
那这段代码实现的功能,能给我细谈谈吗?
作者: caicheng    时间: 2005-06-24 15:05
标题: 汇编的问题.
好象有点明白了,是不是读取所有栈中的命令行参数并显示呀?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2