1. 程式人生 > >30天自制操作系統(二)匯編語言學習與Makefile入門

30天自制操作系統(二)匯編語言學習與Makefile入門

-c 如何 wid 開發 大小端 bio strong 入門 小端

1 介紹文本編輯器

這部分可直接略過

2 繼續開發

helloos.nas中核心程序之前的內容和啟動區以外的內容先不講了,因為還涉及到一些軟盤方面的知識。

然後來講的是helloos.nas這個文件

; hello-os
; TAB=4

        ORG        0x7c00             ; 指明程序的裝載地址

; 以下這部分記錄的是FAT12格式的軟盤

        JMP        entry
        DB         0x90
        DB         "HELLOIPL"         ; 啟動扇區的名稱可以是任意的字符串 (8字節)
DW 512 ; 每個扇區(sector)的大小(必須是512字節) DB 1 ; 簇(cluster)的大小 (必須為512字節) DW 1 ; FAT的起始位置 (一般從第一個扇區開始) DB 2 ; FAT的個數 (必須為2) DW 224 ; 根目錄的大小(一般設成224項)
DW 2880 ; 該磁盤的大小(必須是2880扇區) DB 0xf0 ; 磁盤的種類 (必須是0xf0) DW 9 ; FAT的長度 (必須是9扇區) DW 18 ; 1個磁道(track)有幾個扇區(必須是18) DW 2 ; 磁頭數 (必須是2) DD 0 ;
不使用分區, 必須是0 DD 2880 ; 重寫一次磁盤大小 DB 0,0,0x29 ; 意義不明, 固定 DD 0xffffffff ; (可能是)卷標號碼 DB "HELLO-OS " ; 磁盤的名稱(11字節) DB "FAT12 " ; 磁盤格式名稱 (8字節) RESB 18 ; 先空出18字節 ; 程序主體 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 ; 給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 ; 換行2次 DB "hello, world" DB 0x0a ; 換行 DB 0 RESB 0x7dfe-$ ; 填寫0x00, 直到0x7dfe DB 0x55, 0xaa ; 以下是啟動區以外部分的輸出 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 4600 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 RESB 1469432

ORG指令

ORG指令告訴nask,在開始執行的時候,把這些機器語言指令裝載到內存中的哪個地址。

這條指令使得$的含義也發生了變化,不再是指輸出文件的第幾個字節,而是代表將要讀入的內存地址。

ORG是"origin","源頭、起點"的意思,它會告訴nask,程序要從指定的這個地址開始也就是要把程序裝載到內存中的指定地址。

JMP,JE指令

相當於C語言中的goto標簽,多年以來我們都被教育不要用goto......

"JMP entry"這個指令就是讓CPU執行內存地址為entry處的程序。