5 暫存器與BIOS中斷

2021-06-22 07:29:35 字數 2643 閱讀 9021

在計算機系統中,資料儲存採用**儲存架構——暫存器,記憶體和硬碟。暫存器在cpu的晶元內,其訪問速度和cpu的計算速度差不多,但成本比較高,而且cpu的體積也決定了暫存器不可能有較大的容量。在編寫focus系統的啟動**部分,因為要使用組合語言,因此,就需要直接操作暫存器。那麼我們就先了解下cpu內部的一些暫存器。

這裡andrew感到很抱歉,因為沒有辦法深入的去介紹細節性的東西了,如果andrew要將focus編寫過程中所有的細節都詳細的介紹,那麼andrew光寫文章都要寫幾個月,這個有點不太現實,所以andrew想了想,遇到一些知識點,如果這些點大家很容易找到的話,andrew就對這些點大致的介紹一下,給大家指乙個方向,大家知道該自學一些什麼內容,其實andrew介紹的話,也是和別人的資料差不多,相當於複述一下,意義也不大,而且還是消耗很多時間去寫這些東西,所以,請朋友們見諒哈。

通用暫存器

ax——累加暫存器

cx——計數暫存器

dx——資料暫存器

bx——基址暫存器

sp——棧指標暫存器

bp——基址指標暫存器

si——源變址暫存器

di——目的變址暫存器

cpu中有8個通用暫存器,這8個暫存器都是16位的,這些暫存器既具有一般功能,也具有各自的特殊功能。

其中ax,cx,dx和bx暫存器還可以當作兩個8位暫存器使用。

al——累加暫存器低位

ah——累加暫存器高位

cl——計數暫存器低位

ch——計數暫存器高位

dl——資料暫存器低位

dh——資料暫存器高位

bl——基址暫存器低位

bh——基址暫存器高位

在inter的cpu中,資料在用小端模式儲存,即資料的低位放在低位址,資料的高位放在高位址。以ax暫存器為例,如果ax暫存器中的資料為0x1234,那麼al裡存放的是低位0x34,ah裡存放的是高位0x12。

段暫存器

es——附加段暫存器

cs——**段暫存器

ss——堆疊段暫存器

ds——資料段暫存器

段暫存器用於存放對資料訪問時的段基址。

cpu還有狀態暫存器,記憶體管理暫存器和控制暫存器。狀態暫存器記錄cpu執行過程中的狀態和運算結果等,記憶體管理暫存器用於儲存對記憶體方位需要的資料資訊,控制暫存器控制這cpu工作的模式等。這一部分內容可以參考inter的程式設計指南,大家可以在

在上一次的**中,使用到了bios的0x10號中斷,andrew這裡和大家介紹一下bios中斷的使用。bios中斷為作業系統的啟動提供了一些低階的服務,這個和編寫應用程式使用的庫函式有些像,在c語言中呼叫printf函式可以列印字串,作業系統的**不能夠呼叫庫函式,但bios能夠給我們提供一些相關服務的功能。bios的參考資料andrew上傳在

mov cx,#30  

mov dx,#0x1004  

mov bx,#0x000c  

mov bp,#msg  

mov ax,#0x1301  

int 0x10

ah=13h

bh=頁碼

bl=屬性(若 al=00h 或 01h)

cx=顯示字串長度

​(dh、dl)=座標(行、列)

es:bp=顯示字串的位址

al=顯示輸出方式

0——字串中只含顯示字元,其顯示屬性在 bl 中。顯示後,游標位置不變

1——字串中只含顯示字元,其顯示屬性在 bl 中。顯示後,游標位置改變

2——字串中含顯示字元和顯示屬性。顯示後,游標位置不變

3——字串中含顯示字元和顯示屬性。顯示後,游標位置改變

出口引數:無

這是bios0x10號中斷的詳細解釋。cx暫存器存放要顯示暫存器的長度,在**中設定為30個。dx中存放的是顯示座標,即在螢幕中顯示的位置。es:bp是要顯示的字串的位址,es在之前已經設為0x07c0,那麼bp即存放的是字串大偏移位址。ah=0x13,即功能號,決定0x10號中斷執行是做什麼事情,乙個中斷號可以做很多事情,例如顯示字串,顯示乙個字元,配置顯示器等都有0x10號中斷完成,但具體完成什麼功能有ah中的功能號決定。al中為顯示的模式。其實bios的中斷呼叫使用起來還是很方便的。

跟著昨天的內容,昨天完成了focus的引導扇區**,這寫**只是顯示了兩行字串,除此之外什麼都沒做。其實512位元組的**確實能做的事情太有限了,那麼那麼大的作業系統程式,是怎麼執行呢?當然是靠引導扇區的程式了。引導扇區的**量少是因為bios只能把乙個扇區的內容拷貝到記憶體,這一部分作為排頭兵,在記憶體中占領了據點之後,再把作業系統剩下的**搬移到記憶體,這就是引導扇區**的主要內容。

搬移程式就要將程式從軟碟機中讀取到記憶體,這就涉及到如何讀軟碟機的問題了,剛剛講過的,用bios中斷哈,bios的0x13號中斷提供了對磁碟的服務。

ah=0x02;讀盤

ah=0x03;寫盤

al=處理物件的扇區數;

ch=柱面號&0xff;

cl=(扇區號&0x3f)|((柱面號&0x300)>>2);

dh=磁頭號;

dl=驅動器號;

es:bx=緩衝區位址

返回值:

cf=0;沒有錯誤

cf=1;有錯誤,錯誤碼在ah中

謝謝。

————————————————————————

部落格:

DSP 中斷暫存器

幾乎所有的mcu都不允許mov指令修改pc值,這是乙個常識。2.中斷服務表指標暫存器istp interrupt servicetable pointer 用於確定中斷服務程式在中斷服務表中的位址。istp中的字段istb確定ist的位址的基值,另一欄位hpeint確定特定的中斷,並給出這一特定中斷...

zynq中斷,SDK暫存器

中斷 分成三大類spi,ppi,sgi總共96個id號的中斷,這96個中斷要按照不同的優先順序分配到兩個處理器上,這就需要對中斷進行管理 很多輸入的中斷給2個處理器核的中斷控制器需要設定一些什麼樣的控制器暫存器。首先必須有全域性使能,而具體到每乙個中斷的id號,要設定是否使能 是否生處理器中斷 以及...

esp暫存器與ebp暫存器介紹

esp extended stack pointer 是指標暫存器的一種 另一種為ebp 用於堆疊指標。esp為棧指標,用於指向棧的棧頂 下乙個壓入棧的活動記錄的頂部 而ebp為幀指標,指向當前活動記錄的頂部。棧指標與幀指標標識出了當前活動記錄的位置。當函式被呼叫的時候,執行如下操作 將幀指標壓入棧...