1. 程式人生 > 其它 >30天自制作業系統-第02天-組合語言學習與MakeFile入門

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"