CS 寄存器 和 IP 寄存器

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

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

什麼叫作指示了 CPU 當前將要讀取的指令呢?在 8086  CPU 中,爲何  CPU  會自動的執行指令呢?操作系統

這些指令確定是存放在內存中的,可是  CPU  怎麼知道這些指令存放在內存的那個位置呢?指針

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

    MOV AX,1234H
    MOV BX,AX

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

image

很顯然, 1000H:0000H 指向的是  MOV  AX,1234H  的首地址,get

若是 CPU 要讀取到個人指令的話,很顯然,必需要知道地址  1000H:0000H ,it

而後  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  當前執行的指令。
相關文章
相關標籤/搜索