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/

10-11 19:32