指令指針寄存器EIP中存放下一條將要執(zhí)行指令的偏移量(offset ),這個偏移量是相對于目前正在運行的代碼段寄存器CS而言的。偏移量加上當前代碼段的基地址,就形成了下一條指令的地址。EIP中的低16位可以分開來進行訪問,給它起名叫指令指針I(yè)P寄存器,用于16位尋址。
指令指針寄存器ip,里面放置的是不是指令,而是一個指向下一個將要去獲取的指令的內存地址(所以它是一個指針)。
它們的關系就是,CPU從指令指針寄存器ip 獲得指令的內存地址,然后取出指令,放置到指令寄存器IR。接下來,指令指針寄存器ip自己加1(也就是指向下一條指令)。
指令指針寄存器和指針寄存器的差異
指令指針寄存器
32位CPU把指令指針擴展到32位,并記作EIP,EIP的低16位與先前CPU中的IP作用相同。
指令指針EIP、IP(InstrucTIon Pointer)是存放下次將要執(zhí)行的指令在代碼段的偏移量。在具有預取指令功
能的系統中,下次要執(zhí)行的指令通常已被預取到指令隊列中,除非發(fā)生轉移情況。所以,在理解它們的功能
時,不考慮存在指令隊列的情況。
在實方式下,由于每個段的最大范圍為64K,所以,EIP中的高16位肯定都為0,此時,相當于只用其低16位
的IP來反映程序中指令的執(zhí)行次序。
指針寄存器
32位CPU有2個32位通用寄存器EBP和ESP。其低16位對應先前CPU中的SBP和SP,對低16位數據的存取,不影
響高16位的數據。
寄存器EBP、ESP、BP和SP稱為指針寄存器(Pointer Register),主要用于存放堆棧內存儲單元的偏移量,
用它們可實現多種存儲器操作數的尋址方式,為以不同的地址形式訪問存儲單元提供方便。
指針寄存器不可分割成8位寄存器。作為通用寄存器,也可存儲算術邏輯運算的操作數和運算結果。
它們主要用于訪問堆棧內的存儲單元,并且規(guī)定:
BP為基指針(Base Pointer)寄存器,用它可直接存取堆棧中的數據;
SP為堆棧指針(Stack Pointer)寄存器,用它只可訪問棧頂。