CS、IP和PC暫存器
CS、IP和PC暫存器
CS暫存器和IP暫存器:
首先強調一下,這兩個暫存器非常非常重要,CS的全拼為“Code segment”,即程式碼段暫存器,對應於記憶體中的存放程式碼的記憶體區域,用來存放記憶體程式碼段區域的入口地址(段基址)。
CPU在執行指令時,通過程式碼暫存器CS和指令指標暫存器IP(instruction Pointer)來確定要執行的下一條指令的記憶體地址。
CS:IP 兩個暫存器指示了CPU當前要賭氣的指令地址,計算方式一般為CS左移4位然後加上IP暫存器,作為地址去取內容。
CPU的製造商會為這兩個暫存器設定出廠初始值,這2個初始值,其實就決定了第一條執行指令的地址,這是所有程式的源頭,沒有這個初始值,多麼複雜精妙的程式都沒用,因為CPU壓根就不會鳥你。隨著X86的發展,第一條指令並不是一成不變的,
(1)8086:CPU reset後CS暫存器的值為0xFFFF,IP暫存器的值為0,所以將CS左移4位+IP,換算出的實體地址為0xFFFF0,這個地址就是
1MB往下16位元組的位置。
(2)80286:CPU reset之後CS的只為0xF000,IP的只為0xFFF0,演算法同樣是CS左移4位+IP,計算出的實體地址也是0xFFFF0
(3)80386:到了386年代,一切都變了,此時CPU reset後CS的只為0xF000,但是CS除了段選擇之外還有一個隱藏的基址暫存器,這個寄存
器的值為0xFFFF0000,IP的值仍然為0xFFF0,此時的計算演算法也不是上面的左移4位了,而是0xFFFF0000 + 0xFFF0 = 0xFFFFFFF0
,這個地址已經是很高的地址了,是4G往下16位元組的位置。
PC是非intel廠家對IP的稱呼,也就是說PC起始跟CS:IP是一回事兒。
相關文章
- CS 暫存器 和 IP 暫存器
- PC暫存器
- 暫存器定址和暫存器間接定址的區別
- 暫存器
- JVM-執行時資料區之PC暫存器JVM
- 6.常見暫存器和指令
- 為什麼Modbus的只讀暫存器被稱為“輸入暫存器(Input Registers)”而不是“輸出暫存器”
- 【STM32】【暫存器】暫存器位讀寫方式配置系統時鐘
- Git工作區和暫存區Git
- 暫存
- 新手分享_再談FS暫存器
- CPU 中通用暫存器的作用
- 關於STM32的BSRR(埠位設定/清除暫存器) 和 BRR(埠位清除暫存器) 的理解(初學32)
- 除錯時檢視彙編和暫存器資料等除錯
- iOS彙編基礎(二)暫存器iOS
- 10.1 除錯事件讀取暫存器除錯事件
- 程式設計中暫存器的使用程式設計
- STM32 GPIO 暫存器的配置
- 第五章:通用暫存器是()。
- 暫存器指定為寫0或者1
- Intel 8086微處理器暫存器結構Intel
- 暫存器,觸發器,三極體小結觸發器
- 自學C day03-CPU內部結構和暫存器
- Java讀取暫存器資料的方法Java
- 一文搞懂 ARM 64 系列: 暫存器
- STM32暫存器操作、模板構建
- 基於暫存器呼叫的軟體加速
- 程式分析與優化 - 8 暫存器分配優化
- 【C/C++】 C++暫存器優化C++優化
- 【STC8H】STC8系列專有的特殊的暫存器位——PW_2暫存器的最高位 EAXFR
- CPU中跟蹤後繼指令地址的暫存器
- 函式呼叫暫存器及棧幀結構函式
- Git清空暫存區Git
- Mac版Sourcetree暫存程式碼和取出程式碼Mac
- 3. 暫存器(記憶體) | 問題 3.7 - 3.10記憶體
- STM32F103點亮LED暫存器方式
- 暫存一些模板
- 058線性反饋移位暫存器產生m序列