大会中的strlen,关闭1?

时间:2012-03-03 22:07:15

标签: assembly strlen i386

我编写了以下可从C调用的汇编函数来计算以null结尾的字符串的长度。但由于某种原因,计数始终是+1。我无法弄清楚为什么。任何线索?

感谢!!!

 1  .text
 2  .globl _len
 3  _len:
 4          pushl %ebp              # set up stack frame
 5          movl %esp, %ebp         # save esp in ebp
 6          movl 8(%ebp), %ecx      # the beg of string
 7          xor %eax, %eax          # init length to 0
 8          
 9  start:
10          xor %edx, %edx          # char at this index
11          movb (%ecx), %dl        # 
12          inc %eax
13          inc %ecx
14  
15          cmpb $0x0,  %dl
16          jne start
17  end:
18  
19          movl %ebp, %esp         # restore esp
20          popl %ebp               # restore ebp
21          ret
22          .end
23 

2 个答案:

答案 0 :(得分:2)

您正在计算终止零字符。比较后以-1开头或增量。

答案 1 :(得分:1)

在递增字符计数器(cmpb $0x0, %dl)之前尝试将当前字符与零(eax)进行比较,例如取一个空字符串,因为计数器递增,函数将返回1在确保有效字符可以计算之前。