gpt4 book ai didi

assembly - NASM 中的增量循环

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:11 25 4
gpt4 key购买 nike

我在尝试让这段汇编代码工作时遇到了问题:

section .text
global _start
_start:
loop:
mov rax, 4
mov rdi, 1
add rsi, 1
mov rdx, 1
syscall
cmp rsi,11
jne loop
exit:
mov rax,60
xor rdi,rdi
syscall

此代码的目的是增加rsi 寄存器中的值并将其值打印 10 次。它是在 Linux x86_64 机器上用 NASM 编写的。

最佳答案

您的回答有很多问题,首先是系统调用号。您将值 4 放入 rax 但对于 x86_64 linux,sys_write 的值是 1

http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/

其次,你的参数有问题,sys_write 的调用如下,sys_write(unsigned int fd, const char *buf, size_t count),其中rdifdrsibufrdxcount。您的调用的问题是您将 rsi 作为字面值 1,这使得 linux 转到地址 0x1 以查找要打印的内容,这显然是无效的。

考虑这个例子是打印数字“1”然后换行的有效方法

section .data
myNum: db '1', 0xA

section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, myNum
mov rdx, 2
syscall
mov rax, 60
mov rdi, 0
syscall

关于assembly - NASM 中的增量循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50239005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com