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 暫存器
- 暫存器定址和暫存器間接定址的區別
- 暫存器
- JVM-執行時資料區之PC暫存器JVM
- 6.常見暫存器和指令
- CS:IP
- 為什麼Modbus的只讀暫存器被稱為“輸入暫存器(Input Registers)”而不是“輸出暫存器”
- 【STM32】【暫存器】暫存器位讀寫方式配置系統時鐘
- Smali語法:Registers(暫存器)
- 8.ARM工作模式和暫存器及異常模式
- 暫存
- Git工作區和暫存區Git
- 新手分享_再談FS暫存器
- 暫存器::Vim進階索引[4]索引
- 客戶暫存器結構(轉)
- CUDA優化之執行配置和暫存器優化優化
- Git 暫存修改檔案 取消暫存Git
- Cisco 路由器暫存器配置[轉貼]路由器
- 關於STM32的BSRR(埠位設定/清除暫存器) 和 BRR(埠位清除暫存器) 的理解(初學32)
- 除錯時檢視彙編和暫存器資料等除錯
- 自學C day03-CPU內部結構和暫存器
- 暫存器,觸發器,三極體小結觸發器
- 程式設計中暫存器的使用程式設計
- iOS彙編基礎(二)暫存器iOS
- 移位暫存器設定移位長度
- STM32 GPIO 暫存器的配置
- Intel 8086微處理器暫存器結構Intel
- Git 工作區、暫存區和版本庫Git
- 【C/C++】 C++暫存器優化C++優化
- 10.1 除錯事件讀取暫存器除錯事件
- 程式分析與優化 - 8 暫存器分配優化
- 基於暫存器呼叫的軟體加速
- 彙編基礎——常用暫存器及其用途
- 組合語言中暫存器的英文全程組合語言
- Vim使用進階:10種暫存器剖析
- 【彙編】計算機暫存器介紹計算機
- 一文搞懂 ARM 64 系列: 暫存器
- STM32暫存器操作、模板構建