【发布时间】:2012-03-03 22:07:15
【问题描述】:
我编写了以下可从 C 调用的汇编函数来计算以空字符结尾的字符串的长度。但由于某种原因,计数总是减少 +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
【问题讨论】:
-
只是为了避免因使用不同的术语而引起的问题,“总是关闭 +1”是什么意思?你有一个包含 N 个字符的字符串,然后是一个 NULL,最后的计数返回 N+1?
-
对!!!!!!我忘记了这个计数实际上占了 NULL 字符的事实!谢谢
-
请注意,
xor %edx, %edx在您的功能中没有任何用途。 -
在这里被一个人淘汰是非常健康的。 C 代码中没有比忘记额外的 0 更大的错误。