下面將要介紹的是一組非常非常重要的暫存器,即 cs:ip 。
cs:ip 兩個暫存器指示了 cpu 當前將要讀取的指令的位址,其中cs 為**段暫存器,而ip 為指令指標暫存器。
什麼叫做指示了 cpu 當前將要讀取的指令呢?在 8086 cpu 中,為什麼 cpu 會自動的執行指令呢?
這些指令肯定是存放在記憶體中的,但是 cpu 怎麼知道這些指令存放在記憶體的那個位置呢?
比如,我有下面的兩條指令要執行:
mov ax,1234h而假設這兩條指令在記憶體中存放為:mov bx,ax
很顯然, 1000h:0000h 指向的是 mov ax,1234h 的首位址,
如果 cpu 要讀取到我的指令的話,很顯然,必須要知道位址 1000h:0000h ,
然後 cpu 就可以根據這個首位址,將彙編指令 mov ax,1234h 所對應的機器碼讀入到 cpu 的指令暫存器中,
最後便可以在 cpu 中進行處理了。
但關鍵是 cpu 如何知道我的 1000h:0000h 這個首位址?
其實這就需要使用到 cs:ip 這個暫存器組了 。
當我們執行乙個可執行檔案時,很明顯,我們需要另外乙個程式來將這個可執行檔案載入到記憶體當中,
關於這個載入可執行檔案的程式,我們在這裡不管他,點一下即可,
一般是通過作業系統的外殼程式(也就是傳說中的 shell 程式),
shell 將可執行檔案載入到記憶體中以後,就會設定 cpu 中的兩個暫存器,即設定 cs:ip 兩個暫存器指向可執行檔案的起始位址,此後 cpu 便從這個起始位址開始讀取記憶體中的指令,並且執行。
比如我們在寫匯程式設計序時,通常會使用 start 標記,其實這個標記就是用來標記起始位址的,
當將乙個匯程式設計序編譯,連線成可執行檔案以後,再通過作業系統的 shell 程式將可執行檔案載入到記憶體中以後,
這個 start 所標記處的位址就是整個可執行檔案的起始位址了 。
也就是說,當乙個可執行檔案載入到記憶體中以後,cs:ip 兩個暫存器便指向了這個可執行檔案的起始位址,
然後 cpu 就可以從這個起始位址開始往下讀取指令,
當讀取完指令後,cs:ip 將會自動的改變,基本上是改變 ip,從而指向下一條要讀取的指令,這樣就可以執行這個可執行檔案了 。
最後再對 cs:ip 總結一下:
你想讓 cpu 執行哪行指令,你就讓 cs:ip 指向儲存有指令的那塊記憶體即可。
任何時候,cs:ip 指向的位址中的內容都是 cpu 當前執行的指令。
暫存器(通用暫存器)
因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...
暫存器,標誌暫存器
涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...
8086 CS和IP暫存器
cs 暫存器 和 ip 暫存器 經過前面對段的介紹,相信各位朋友對段暫存器應該也有一定的了解了,下面將要介紹的是一組非常非常重要的暫存器,即 cs ip cs ip 兩個暫存器指示了 cpu 當前將要讀取的指令的位址,其中 cs 為 段暫存器,而 ip 為指令指標暫存器 什麼叫做指示了 cpu 當前...