CS 寄存器 和 IP 寄存器


下面將要介紹的是一組非常非常重要的寄存器,即 CS:IP 。

CS:IP 兩個寄存器指示了 CPU 當前將要讀取的指令的地址,其中  CS 為代碼段寄存器,而   IP 為指令指針寄存器

什么叫做指示了 CPU 當前將要讀取的指令呢?在 8086  CPU 中,為什么  CPU  會自動的執行指令呢?

這些指令肯定是存放在內存中的,但是  CPU  怎么知道這些指令存放在內存的那個位置呢?

比如,我有下面的兩條指令要執行:

    MOV AX,1234H
    MOV BX,AX

而假設這兩條指令在內存中存放為:

image

很顯然, 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  總結一下:

  1. 你想讓  CPU  執行哪行指令,你就讓  CS:IP  指向保存有指令的那塊內存即可。
  2. 任何時候,CS:IP  指向的地址中的內容都是  CPU  當前執行的指令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM