繁体   English   中英

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

[英]Why does this x86_64 assembly code does not work?

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。

在循环中增加rax 否则,您将始终测试相同的字节。

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

在循环之外增加rax

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM