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