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

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

但是当我执行程序时,它没有输出任何东西,也没有关闭。

最佳答案

您需要在循环内递增 rax。

关于c - 为什么这个 x86_64 汇编代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6081142/

相关文章:

c++ - 为什么当递归函数结果相乘时,g++仍然优化尾递归?

c++ - 我收到以下错误 : [Warning] multi-character character constant

c++ - windows中控制台输出流的编码

c - C 扩展中的 Ruby 关键字参数

c++ - 如何在 mingw 上安装 nasm 以使用 pjsip 库为 Windows 应用程序构建 openh264 库

linux - GDB 提示没有可用的资源

operating-system - 制作定制版 mikeOS 的可启动闪存驱动器

c - 表初始化因变量而失败

macos - 引导加载程序的问题

c - 将 movsbl 汇编为 C 代码