第2天

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的無限循環,更加節能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章