Я написал следующую функцию сборки, вызываемую из C, чтобы подсчитать длину строки с нулевым завершением. Но почему-то счет всегда выключен на +1. Я не могу понять, почему. Любая подсказка?strlen в сборе, выкл. 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? – karatedog
Правильно !!!!!! Я забыл тот факт, что этот счет фактически составлял символ NULL! Спасибо – user113454
Обратите внимание, что 'xor% edx,% edx' не имеет никакой цели в вашей функции. –