Уроки по загрузке не работают для меня - PullRequest
2 голосов
/ 09 января 2012

Я пытался использовать некоторые учебные пособия по сборке в Интернете, и большинство из них не работают для меня.Я использую NASM и VirtualBox (не могу заставить работать Bochs), и такие вещи работают так:

[BITS 16]
[ORG 0x7C00]
push 0xB800
pop es
mov byte [es:0],'A'
mov byte [es:1],0x1F
jmp $
times 510-($-$$) db 0
dw 0xAA55

, но это не так:

[BITS 16]
[ORG 0x7C00]
mov ah,0x09
mov al,'A'
mov bh,0
mov bl,0x1F
mov cx,1
int 0x10
jmp $
times 510-($-$$) db 0
dw 0xAA55

IЯ использую этот пакетный скрипт, который я сделал:

:: Compile with NASM ::
@echo off
echo Compiling boot.asm to boot.bin
cd C:/Users/Christian/Desktop/Assembly

C:/nasm/nasm -f bin boot.asm -o boot.bin

:: Copy to a floppy image with bfi ::
echo Creating boot.img

cd C:/Users/Christian/Desktop/Assembly
timeout 1 >nul
C:/Users/Christian/Desktop/Assembly/bfi -b=boot.bin -t=4 -l="Boot" -f=boot.img

:: Start Virtual Machine ::
echo Starting Virtual Machine "Test"

timeout 1 >nul
"C:\Program Files\Oracle\VirtualBox\VBoxManage" controlvm "Test" poweroff
"C:\Program Files\Oracle\VirtualBox\VBoxManage" startvm "Test"

Есть идеи, почему это не работает?

Я также попробовал ndisasm -b 16 boot.img, как и предлагалось, ноон просто многократно выводит div dh?(это на рабочей версии)

1 Ответ

1 голос
/ 09 января 2012

Как загрузчик, у вас не будет действительного стека, вам нужно будет настроить его самостоятельно.Любые операции со стеком (которые вы вызываете с помощью INT) чреваты опасностью, если вы не знаете, , у вас хороший стек!

...