我一直避免双启动我的新笔记本电脑来使用 Ubuntu,并且我有一些汇编代码要在 nasm 中运行。我最近偶然发现了这个适用于 Windows 的 Ubuntu 终端,所以我的问题是:我可以安装 nasm 包并在这个终端中运行 .asm 代码吗?
编辑:.asm 代码正在编译(我编写了“Hello World”代码作为测试),步骤如下:
nasm -f elf64 filename.asm
ld -o filename filename.o
./filename
终端上没有输出,因为它应该显示Hello World
。
以下是供参考的代码:
section .data
msg db "Hello World"
msglen equ $-msg
section .text
global _start
_start:
mov rax,1
mov rdi,1
mov rsi,msg
mov rdx,msglen
mov rax,60
mov rdx,0
syscall
答案1
您跳过了syscall
代码中的 a!
最后一行的syscall
用于退出程序。但是,要显示字符串,必须syscall
在填写rax
、rdi
、rsi
和rdx
寄存器后再创建另一个。
正确的代码如下:
section .data
msg db "Hello World", 10
msglen equ $-msg
section .text
global _start
_start:
mov rax,1
mov rdi,1
mov rsi,msg
mov rdx,msglen
syscall
mov rax,60
mov rdx,0
syscall
10
我还在字符串末尾添加了“新行”(ASCII 十进制代码),以便在Hello World
字符串后显示新行。