assembly NASM中的增量循环

p5fdfcr1  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(143)

我在尝试使用此汇编代码时遇到了问题:

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编写的。

ee7vknir

ee7vknir1#

您的答案有很多地方不对,首先是系统调用编号。
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),其中rdifdrsibuf,且rdxcount。调用的问题在于,您将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

相关问题