org 0x7c00 ;將程序加載到此處執行
jmp entry ;跳轉到entry
;.....
;中略
;.....
;核心程序
entry:
mov ax,0
mov ss,ax
mov sp,0x7c00
mov ds,ax
mov es,ax
mov si,msg
putloop:
mov al,[si]
add si,1
cmp al,0
je fin
mov ah,0x0e
mov bx,15
int 0x10 ;調用顯卡的BIOS
jmp putloop
fin:
hlt ;讓CPU停止
jmp fin
msg:
db 0x0a,0x0a
db "hello,world!"
db 0x0a
db 0
我們將啓動區的代碼改寫,下面我們來解釋下代碼的意思。
1、org:該指令指示編譯器將代碼裝載到地址0x7c00處執行(0x7c00是當年IBM規定的,即0x00007c00~0x00007dff之間的512字節作爲啓動區)。
2、
cmp al,0
je fin
cmp al,0:比較指令
je:je是條件跳轉指令之一,如果比較結果相等,則跳轉到指定的地址;否則,執行je的下一條指令。
3、int 0x10:調用顯卡的BIOS。int是軟件中斷指令,BIOS爲操作系統開發人員準備了各種函數的信念,而int就是用來調用這些函數的指令。int後面的數字,表示調用不同的函數。要顯示一個字符的時候,必須設定相應寄存器的值。ah的值0x0e即表示指定字符顯示這個功能,al = 字符代碼,bh = 0,bl = 顏色
4、hlt:讓CPU停止動作的指令,但並不是徹底地停止(除非斷電),而是讓CPU進入待機狀態,只要外部發生變化,如按下鍵盤,或是移動鼠標,CPU就會醒過來繼續執行程序。其實這裏要不要這條指令都一樣,只不過要了這條就避免了jmp的無限循環,更加節能。