section .text
global my_strlen
my_strlen:
xor rax, rax
.LOOP:
cmp BYTE[rdi+rax], 0
jne .LOOP
inc rax
ret
我的执行方式是:
#include <stddef.h>
#include <stdio.h>
extern size_t my_strlen(const char *str);
int main(int argc, char *argv[]) {
if(argc!=2) return 1;
printf("%lu\n", (unsigned long)my_strlen(argv[1]));
return 0;
}
但当我执行程序时,它不会输出任何东西,也不会关闭。
最佳答案
循环中的增量rax
否则,您总是测试同一个字节。
my_strlen:
xor rax, rax
dec rax
.LOOP:
inc rax
cmp BYTE[rdi+rax], 0
jne .LOOP
关于c - 为什么此x86_64汇编代码不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6081142/