keyboard not found! Please press F1 to continue.
阿新 • • 發佈:2019-01-08
boot.asm程式碼:
[org 0x7c00]
KERNEl_ADDR equ 0x820;資料要載入到0x8200:0000處(姑且當作是核心)
mov bx,LOADING_STR
call print_str;輸出loading...字串,bx是字串地址引數
mov ah,0x02;2h代表讀盤
mov al,1;讀一個扇區
mov ch,0;0柱面
mov dh,0;0磁頭
mov cl,2;2扇區
mov dl,0;0號驅動器
mov ax,KERNEl_ADDR
mov es,ax;資料最終載入到es:bx處
mov bx,0
int 13h;讀取磁碟到記憶體
jnc readDisk_successful;如果讀取成功CF標誌為置0
jmp readDisk_error;讀取失敗,輸出資訊
loop:
jmp loop
readDisk_successful:
mov bx,READ_DISK_SUCCESS
call print_str
jmp loop
readDisk_error:
mov bx,READ_DISK_ERROR
call print_str
jmp loop
print_str:;和上一個程式不同,這次我講輸出字串的程式改成了一個函式
mov ah,0x0e
mov bp,bx
mov al,[bp]
cmp al,0
jz return
int 10h
add bx,1
jmp print_str
return:
ret
LOADING_STR:
db "loading...",13,10,0
READ_DISK_SUCCESS:
db "read disk successful!",13,10,0
READ_DISK_ERROR:
db "read disk error!",13,10,0
times 510-($-$$) db 0
dw 0x55aa
times 510 db 0
dw 0x55aa
編譯指令:
nasm boot.asm -f bin -o boot.img
Virtual Box 執行結果:
參考:
BIOS int 13h功能引數表
BIOS int 10h功能引數表