Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux NASM中的增量循环_Linux_Assembly_Nasm_X86 64 - Fatal编程技术网

Linux NASM中的增量循环

Linux NASM中的增量循环,linux,assembly,nasm,x86-64,Linux,Assembly,Nasm,X86 64,我在尝试使此汇编代码正常工作时遇到问题: 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倍。

我在尝试使此汇编代码正常工作时遇到问题:

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

其次,您的参数有问题,对sys_write的调用如下,sys_writeunsigned int fd,const char*buf,size_t count,其中rdi是fd,rsi是buf,rdx是count。调用的问题是,您将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

如果你要否决投票,请解释你认为答案有什么问题,只是按下否决投票按钮对任何人都没有帮助

你的答案有很多问题,首先是系统呼叫号码。您将值4放在rax中,但对于x86_64 linux,sys_write的值为1

其次,您的参数有问题,对sys_write的调用如下,sys_writeunsigned int fd,const char*buf,size_t count,其中rdi是fd,rsi是buf,rdx是count。调用的问题是,您将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

如果你要否决投票,请解释你认为答案有什么错误,只需点击否决投票按钮对任何人都没有帮助

打印其值是什么意思,linux操作系统没有打印整数服务,值1不是可打印字符,对于常见的linux服务sys_write,您必须提供指向字符的指针,而不是字符本身。您是否可以展示一些至少打印一次值的示例,以您想要的方式打印,然后解释循环应该做什么?可能从一些正在工作的hello world示例开始,并在调试器中检查它,它是如何工作的?参数值是什么?您还可以使用strace工具查看代码提供的参数。rax=4服务是sys_stat,调用它没有任何意义,如果您想打印出一些内容,因为sys_stat将收集有关文件的信息,它不会在任何地方打印任何内容。打印出其值是什么意思,linux操作系统没有打印整数服务,值1不是可打印字符,对于常见的linux服务sys_write,您必须提供指向字符的指针,而不是字符本身。您是否可以展示一些至少打印一次值的示例,以您想要的方式打印,然后解释循环应该做什么?可能从一些正在工作的hello world示例开始,并在调试器中检查它,它是如何工作的?参数值是什么?您还可以使用strace工具查看您的代码提供了哪些参数。rax=4服务是sys_stat,调用它没有任何意义,如果您想打印一些内容,因为sys_stat将收集有关文件的信息,它不会在任何地方打印任何内容。