我编写了以下可从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
答案 0 :(得分:2)
您正在计算终止零字符。比较后以-1开头或增量。
答案 1 :(得分:1)
在递增字符计数器(cmpb $0x0, %dl
)之前尝试将当前字符与零(eax
)进行比较,例如取一个空字符串,因为计数器递增,函数将返回1在确保有效字符可以计算之前。