花上班的休息時間寫出來的一篇文章
注意:以下暫存器命令執行環境為實模式,保護模式下cs:ip的定址方式會發生變化,以下模式不再適用。
根據網上資料查詢可知:
cs和ip為兩個暫存器,分別是**段暫存器和指令指標暫存器,cs暫存器中所儲存的資料是當前要執行的**段的首位址,ip暫存器中所儲存的資料是下一段將要執行的**段的位址,本人的理解為偏移量或者**段長度。兩個暫存器一般組合在一起使用,作為8086cpu中最關鍵的兩個暫存器,cs:ip指向了當前要執行的指令的位址。
在解釋cs:ip是怎麼執行指令之前,先要補充一些知識。
使用以下**段來說明:
以上為一段長度為24個byte的**,假設存放在記憶體中,位址從00000h~00018h中,那麼就可以認為,記憶體單元00000h~00018h是用來存放**的,是乙個**段。ps:cpu只會將cs:ip所指向的記憶體單元裡面的內容視為指令,其他記憶體單元裡面的內容可以是指令也可以是資料,所以如果想要將指定記憶體單元裡面的內容視為指令,可讓cs:ip指向**段首位址即可(可以使用彙編指令jmp進行指向)。
如cs = ffffh, ip = 0000h,在取出cs:ip中的位址前先對這兩個暫存器中所儲存的位址進行相加操作,操作如下:1.cs中的資料左移四位, 所以最終cs = ffff0h(為什麼會得到這個結果?因為這個資料是16進製制的,「h」代表了「hex」) 2.cs+ip = ffff0h+0000h = ffff0h。3.最後位址加法器將「fffff0h」這個位址輸出,並且開始尋找該位址所在的記憶體單元,由此可以cs:ip兩個暫存器相加所得到的位址才是實際的**段的記憶體單元的位址。
1)8086cpu當前狀態
2)cs暫存器以及ip暫存器內的資料傳輸到位址加法器進行加法操作
3)獲得位址13200傳入控制電路中,控制電路將位址傳入位址匯流排中
4)位址匯流排在記憶體單元中找到該位址中的資料並傳入到資料匯流排中
5)控制電路接收資料匯流排中的資料,並將資料存放到資料緩衝區中
6)最後資料緩衝區中的資料送入執行器中,命令執行,ip暫存器中的資料加2
組合語言 暫存器
乙個典型的cpu由運算器 控制器 暫存器等器件組成,這些器件靠內部匯流排相連。通用暫存器 ax bx cx dx 段位址暫存器 cs ds es ss 專用暫存器 bp sp si di 指令指標暫存器 ip 標誌暫存器 psw ah al ax accumulator 累加暫存器 bh bl bx...
組合語言 暫存器
乙個cpu由暫存器,運算器,控制器組成,暫存器負責儲存資料。通用暫存器 ax,bx,cx,dx。8086cpu的暫存器都是16位的,能存放兩個位元組。乙個暫存器又能分為兩個部分,乙個高位位元組如ah,還有乙個地位位元組如al。這兩個部分可以單獨看成乙個八位暫存器來用。當暫存器當整體來看時,它可以進行...
組合語言 暫存器
ax,bx,cx,dx 這4個暫存器通常用來存放一般性的資料,被稱為通用暫存器。8086cpu這5個暫存器都可以分為兩個可以獨立使用的8位暫存器來用 ax的低8位 0 7 構成al暫存器,高8位 8 15 構成了ah暫存器。ah和al暫存器是可以獨立使用的8位暫存器。考慮相容性8086cpu可以一次...