@HelpMePlease2

Почему этот asm код запускается?

У меня есть код который компилируется NASM и запускается в QEMU. Он должен просто вывести Hello, world в BIOS. Но вместе с ним запускается reboot_req. В чём проблема?
[org 0x8000]

mov si, helloworld
call print
mov si, newline
call print

reboot_req:
    mov si, reboot_request
    call print
    mov ah, 0x0
    int 0x16
    int 0x19

%include "print.asm"
helloworld: db "Hello, world!!!", 0
newline: db 0x0d, 0xa, 0
reboot_request: db 0x0d,0xa, "Press any key to reboot...", 0x0d,0xa,0
cmd: db "$ ", 0
wrongcmd: db "Wrong command!!!", 0
times 2048-($-$$) db 0

А это файл print.asm
print:
    push ax
    push si

    mov ah, 0x0e
    .Loop:
    mov al, [si]
    cmp al, 0
    je .Exit
    int 0x10
    inc si
    jmp .Loop
    .Exit:
    pop ax
    pop si
    ret
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
ematveev
@ematveev
PHP разработчик / руководитель / писатель
print.asm
print:
    push ax
    push si
......
    pop ax
    pop si

для начала нужно исправить ошибку - команды pop должны вызываться в обратном порядке, по сравнению с командами push, а у Вас они идут НЕ в обратном порядке
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы