, поэтому я очень новичок (чрезвычайно новый) в программировании на ассемблере и пытаюсь написать функцию, которая может вычислять длину строки.
Мне кажется, у меня есть некоторые проблемы с очисткой значений в регистрах,или с приращением указателя, потому что возвращаемое значение всегда для меня "4571 + длина".
В основном, если у меня длина строки 0, я получаю 4571 в качестве возвращаемого значения.Если у меня длина строки 6, я получу 4577 в качестве возвращаемого значения и т. Д.
Вот мой код, любая помощь будет оценена:
.globl my_strlen
my_strlen:
pushq %rbp
movq %rsp, %rbp
pushq %r12
pushq %r13
movq $0, %rax
cmp $0, (%rdi)
jne my_strlen_loop
ret
my_strlen_loop:
inc %rax
inc %rdi
cmp $0, (%rdi)
jne my_strlen_loop
popq %r13
popq %r12
popq %rbp
ret