Я избегал к двойной загрузке своего нового Ноутбука для использования Ubuntu все же, и у меня есть некоторые ассемблерные коды, которые будут выполнены в nasm. Я недавно наткнулся на этот терминал Ubuntu для Windows, таким образом, мой вопрос: я могу установить nasm пакет и выполнить коды .asm в этом терминале?
Править: Код .asm компилируется (я написал "Привет Мировой" код как тест) со следующими шагами:
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
Вы пропустили syscall
в Вашем коде!
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
строка.