为什么这个x86_64汇编代码不起作用?
问题描述:
section .text
global my_strlen
my_strlen:
xor rax, rax
.LOOP:
cmp BYTE[rdi+rax], 0
jne .LOOP
inc rax
ret
我执行它:为什么这个x86_64汇编代码不起作用?
#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
+0
INC会不会影响标志? – 2011-05-21 11:46:54
+0
@波佩尔松 - 我的错误 - 我编辑了答案。 – MByD 2011-05-21 11:57:31
答
您需要在循环中增加rax。
答
在循环外增加rax
不应该'inc rax'在循环内吗? – sl0815 2011-05-21 10:36:18