2
我試過在網絡上使用一些程序集教程,其中大部分都不適合我。我使用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
我用這我製作的批處理腳本:
:: 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? (這是工作版本)
嘗試使用QEMU,或以某種方式得到Bochs的工作(崗位上的超級用戶,如果您遇到這些問題 - 我也許能提供幫助,並因而可能其他人)。他們有內部的迷你調試器,可以讓你查看內存,寄存器等,這對於像這樣的東西非常有用。 – Mehrdad 2012-01-09 01:22:33
如果你用'ndisasm -b 16 boot.img'反彙編boot.img,你會得到相同的代碼嗎? – 2012-01-09 04:32:23
BIOS可能沒有將視頻模式設置爲您認爲的模式。你有沒有嘗試首先用INT 0x10(AH = 0)初始化它?也許還可以使用INT 0x10(AH = 2)重置光標位置。你也假設堆棧指針是有效的 - 許多引導加載程序在進入時重置SS:SP(只是爲了確保)。 – adelphus 2012-01-09 15:14:27