第2行為將BootMessage復制給AX。
BP為指針寄存器,第3行將指針寄存器指向字符串起始地址。指針寄存器不能被直接操作,所以依靠AX寄存器進行值傳遞。
CX為計數器寄存器,11為“Helloworld!”字符串長度。
mov ax,01301h ;AH = 13,AL = 01h
該行是本函數的核心,是向屏幕輸出字符的關鍵。
BIOS通過軟件中斷接收執行功能的請求。用nnh調用特定類型的中斷服務函數。
例如10h用于顯示服務 - 由BIOS或操作系統設定以供軟件調用:
AH=00h 設定顯示模式;
AH=01h 設定游標形態;
AH=02h 設置游標位置;
AH=03h 獲取光標位置與形態;
AH=04h 獲取光標位置;
AH=05h 設置顯示頁;
AH=06h 清除或滾動欄畫面(上);
AH=07h 清除或滾動欄畫面(下);
AH=08h 讀取游標處字符與屬性;
AH=09h 更改游標處字符與屬性;
AH=0Ah 更改游標處字符;
AH=0Bh 設定邊界顏色;
AH=0Eh 在TTY模式下寫字符;
AH=0Fh 獲取當前顯示模式;
AH=13h 寫字符串。
AL寄存器一共有8位,但是只使用低2位,高6位并不使用:
如果AL=0,表示目標字符串僅僅包含字符,屬性在BL中包含,不移動光標。
如果AL=1,表示目標字符串僅僅包含字符,屬性在BL中包含,移動光標。
如果AL=2,表示目標字符串包含字符和屬性,不移動光標。
如果AL=3,表示目標字符串包含字符和屬性,移動光標。
mov bx,000ah ;黑底綠字
BX寄存器可分為高八位和低八位。
BH為頁號,BL主要是用來定義一些顏色屬性格式:
若 BIT7 = 1 ,背景閃爍。
若 BIT3 = 1 ,前景色高亮顯示。
BIT4~BIT6 表示背景色。
BIT0~BIT2 表示前景色。
BH=00,BL=0Ah 即頁號為0,不閃爍,背景色為黑色,前景色高亮顯示,前景色為綠色
RET是return縮寫,標示該函數調用結束并返回。
times 510 - ($-$$) db 0 ;生成一串512字節二進制代碼
dw 0xaa55 ;結束標志
這兩行是編寫引導扇區的規范。
理解主引導扇區前需要先闡述什么是扇區。在現代馮諾依曼結構計算機中,存儲器一般由機械硬盤與內存擔任。
機械硬盤內部由若干盤片、可移動讀寫頭、電機、數據傳輸接口以及一個控制電路組合而成。
磁盤盤片磁道上覆蓋著導磁物質,讀寫頭是一枚電磁鐵懸空在盤片上方距離0.1μm~0.5μm處,通過變化的電流產生變化的磁場改變磁道上面的導磁物質極性記錄數據,通過磁生電讀取盤片數據。
一個盤片有兩個磁頭,正面盤片磁頭編號0,反面為1,若有多個盤片磁頭編號便會繼續累加。磁道是是盤片內同心圓,在盤片正反兩面的磁道構成一個柱面,從0開始編號,最邊緣為0,編號往內逐步累加。每個磁道以512字節劃分為若干扇區,編號由1開始。
硬件廠商約定MBR分區位于0面0道1扇區,占512字節儲存主引導程序。計算機上電后BIOS會從主硬盤0面0道1扇區尋找并執行MBR程序,最終通過MBR拉起操作系統。
第1行中表示當前位置,$表示程序起始位置。一個扇區512字節,該表達式的意義就是將這個扇區除了寫有代碼的區域外全部填寫0。并留下2個字節位置。
標準的MBR結構如下圖,這也就解釋了第2行代碼的0xaa55了,它是MBR分區的結束標志!
二、Demo機器碼解析
如無意外,經過編譯后我們將得到一個.bin文件,如果是Windows下使用Vscode作為編譯環境,在編輯器中安裝Hex Editor擴展就能正常顯示。而Linux使用Vim/Vi就能打開。
作為該項目參考書作者李忠老師也開發了一個小工具,如有必要可以在http://www.lizhongc.com/index.php/91.html下載使用。
現在我的電腦是云主機,限于現實環境將使用Vscode進行講解。
-
計算機
+關注
關注
19文章
7511瀏覽量
88101 -
匯編
+關注
關注
2文章
214瀏覽量
25949 -
虛擬機
+關注
關注
1文章
918瀏覽量
28242
發布評論請先 登錄
相關推薦
評論