为什么这个x86_64汇编代码不起作用?

时间:2011-05-21 10:31:31

标签: c assembly nasm

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;
}

但是当我执行程序时,它不会输出任何内容,也不会关闭。

3 个答案:

答案 0 :(得分:4)

你需要在循环内增加rax。

答案 1 :(得分:3)

循环中增加rax。否则,您总是测试相同的字节。

my_strlen:
    xor rax, rax
    dec rax
.LOOP:
    inc rax
    cmp BYTE[rdi+rax], 0
    jne .LOOP

答案 2 :(得分:1)

在循环外增加rax