我可以在 Windows 上的 Ubuntu 终端的 Windows 子系统 Linux(WSL)上安装 nasm 并运行 .asm 代码吗?

我可以在 Windows 上的 Ubuntu 终端的 Windows 子系统 Linux(WSL)上安装 nasm 并运行 .asm 代码吗?

我一直避免双启动我的新笔记本电脑来使用 Ubuntu,并且我有一些汇编代码要在 nasm 中运行。我最近偶然发现了这个适用于 Windows 的 Ubuntu 终端,所以我的问题是:我可以安装 nasm 包并在这个终端中运行 .asm 代码吗?

编辑:.asm 代码正在编译(我编写了“Hello World”代码作为测试),步骤如下:

  1. nasm -f elf64 filename.asm
  2. ld -o filename filename.o
  3. ./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在填写raxrdirsirdx寄存器后再创建另一个。

正确的代码如下:

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字符串后显示新行。

相关内容