30天自制作業系統-第02天-組合語言學習與MakeFile入門
1.程式程式碼核心部分--生成啟動區512位元組(全手工輸入):
ORG 0x7c00 ;指明程式裝載地址
entry:
MOV AX,0 ;AX暫存器置0
MOV SS,AX ;將SS暫存器的值設定為AX暫存器的值
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX
MOV SI,msg
putloop:
MOV AL,[SI] ;將es:si指向的地址單元裡的字元裝入到AL暫存器
ADD SI,1 ; si 加一,則移向下一個地址單元
CMP AL,0 ; al裡的數值(此處為字元值)與0比較,後面msg定義的字串末尾以0結束
JE fin ;如果相等,則跳轉到fin
MOV AH,0x0e ;int 10h,e號功能 ,顯示一個字元
MOV BX,15 ;指定字元顏色, 注意此處是15,即BL=0x0f,BH=顯示頁,BL=顏色,文字模式下無效
INT 0x10
JMP putloop
fin:
HLT ;停機,省電,如果使用jmp $,則CPU死迴圈,耗電
JMP fin ;無限迴圈
msg:
DB 0x0a,0x0a ;換行符,換兩次行
DB "hello,world"
DB 0 ;0作為字串結束符
RESB 0x7dfe-$ ; 0x7dfe 硬編碼
DB 0x55, 0xaa ;引導扇區的標誌,末尾兩位元組必須這樣
2. 8086(真實模式)暫存器:
AX——累加暫存器 CX——計數暫存器
DX——資料暫存器 BX——基址暫存器
SP——棧指標暫存器 BP——基址指標暫存器
SI——源變址暫存器 DI——目的變址暫存器
段暫存器
ES——附加段暫存器 CS——程式碼段暫存器
SS——棧段暫存器 DS——資料段暫存器
FS——沒有名稱 GS——沒有名稱
可以存放地址的暫存器:BX,BP,SI,DI
暫存器AX,CX,DX,BX可以分為高8位和低8位表示,以AX為例,AX的高8位表示為AH,低8位表示為AL。
3.MakeFile:
Makefile檔案格式如下:
target:dependency
(tab)command
其中target表示需要生成的目標檔案;dependency表示生成目標檔案所需要的依賴檔案;command表示生成目標檔案的編譯規則命令列
1)make.bat檔案分析,內容只有下面一行:
..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
解釋:返回到上一級z_tools中使用make.exe工具,其中%1 %2 %3 %4 %5 %6 %7 %8 %9表示傳入引數的資料,這裡傳入引數有9個,對應到Makefile檔案中就是有9條指令
2)makeFile 檔案內容:
# 預設動作
default :
../z_tools/make.exe img
# 映象檔案生成
# 如果要想製作檔案ipl.bin ,先檢查ipl.nas和 MakeFile兩個檔案在不在,如果都在,則執行下一行
ipl.bin : ipl.nas Makefile
../z_tools/nask.exe ipl.nas ipl.bin ipl.lst
helloos.img : ipl.bin Makefile
# \是續行符號
../z_tools/edimg.exe imgin:../z_tools/fdimg0at.tek \
wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img
# 其他指令
asm :
../z_tools/make.exe -r ipl.bin
img :
../z_tools/make.exe -r helloos.img
run :
../z_tools/make.exe img
copy helloos.img ..\z_tools\qemu\fdimage0.bin
../z_tools/make.exe -C ../z_tools/qemu
install :
../z_tools/make.exe img
../z_tools/imgtol.com w a: helloos.img
clean :
-del ipl.bin
-del ipl.lst
src_only :
../z_tools/make.exe clean
-del helloos.img
4.執行make Run 成功,在Qemu中顯示出 "Hello,World"