【发布时间】:2018-05-08 17:13:13
【问题描述】:
我在尝试让这个汇编代码工作时遇到了麻烦:
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 编写的。
【问题讨论】:
-
“打印出它的值”是什么意思,linux操作系统没有“打印整数”服务,值
1不是可打印字符,对于普通的linux服务@987654323 @ 你必须提供指向字符的指针,而不是字符本身。您能否展示一些以您想要的方式至少打印一次值的示例,然后解释循环应该做什么?可能从一些工作的 hello world 示例开始,并在调试器中检查它,它是如何工作的?参数值是什么?您还可以使用strace工具查看您的代码提供了哪些参数。 -
rax=4服务是“sys_stat”,调用它没有任何意义,如果你想“打印”一些东西,因为sys_stat将收集有关文件的信息,它不是在任何地方打印任何东西。
标签: linux assembly nasm x86-64