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

計(jì)算機(jī)組成原理與匯編語(yǔ)言習(xí)題一
計(jì)算機(jī)學(xué)習(xí)教程之指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì)課件免費(fèi)下載
構(gòu)建 4 位計(jì)算機(jī):匯編語(yǔ)言和匯編器(第 2 部分)

計(jì)算機(jī)啟動(dòng)的細(xì)節(jié)與匯編Demo的拆解1

評(píng)論