30天自制操作系統:第3天:進入32位模式並導入C語言

第3天:進入32位模式並導入C語言


一些BIOS命令

  1. AH=0x00 調用顯卡模式,此後可以通過設置AL來進行顯卡設置
  2. AH=0x02 讀盤
  3. AH=0x03 寫盤
  4. AH=0x04 校驗
  5. AH=0x0c 尋道
  6. AL=處理對象的扇區數
  7. CH=柱面號
  8. DH=磁頭號
  9. DL=驅動器號

磁盤講解

  • C0-H0-S1 柱面0,磁頭0,扇區1。磁頭在一個磁盤的正反面,共兩個,相當於正反盤面;柱面、磁頭都從0開始編號,扇區從1開始編號。
  • 用二進制編輯器打開磁盤映像文件,發現文件名會寫在0x002600之後,文件內容會寫在0x004200之後。

彙編語言講解

  1. ES:BX 這種方式表示地址,實際地址意爲ES*16+BX。ES叫做段寄存器,定位一個區域,BX是偏移。MOV AL,[ES:BX] 意爲將內存ES*16+BX處的值賦給寄存器AL。如果不寫段寄存器,寫成MOV AL,[BX],則默認的段寄存器是DS,這個句子相當於MOV AL,[DS:SI].

  2. JC 跳轉指令,是"Jump if carry"的縮寫。如果進位標誌是1,就跳轉。進位標誌位寄存器爲CF: counter flag.

    JC error 如果進位標誌是1,就跳轉到error標號處。

  3. JNC 跳轉指令,“Jump if not carry”.如果進位標誌是0就跳轉

    JNC fin

  4. JAE 跳轉指令,“Jump if above or equal”.如果上文的CMP X,C指令判斷得X>=C,則跳轉

    CMP SI,5

    JAE error

  5. JBE 跳轉指令,“Jump if below or equal”.小於等於則跳轉

  6. JB 跳轉指令,“Jump if below”.小於則跳轉

  7. EQU 常數賦值語句,“equal”,相當於#define. CYLS EQU 10意爲CYLS=10.

  8. RET 相當於return,彙編中的“返回”

彙編函數

下面是一段彙編程序實現的函數,見原書P62,文件夾harib00j

;naskfunc
;TAB=4

[FORMAT "WCOFF"]	; 製作目標文件的模式
[BITS 32]			; 製作32位模式用的機械語言

;製作目標文件的信息

[FILE "naskfunc.nas"]		;源文件名信息
	GLOBAL _io_hlt			;程序中包含的函數名
	
;以下是實際函數

[SECTION .text]				;目標文件中寫了這些之後再寫程序

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