esp ebp esi edi 它們可以像資料暫存器一樣在運算過程中存放運算元,但它們只能使用16位。其實他們通常的用途是在段內定址時提供偏移地址。
暫存器作用
eax累加器,算數運算的主要暫存器。
ecx計數器,在迴圈指令和傳處理指令中當作計數器。
edx資料暫存器,一般在做雙字長運算時把 edx 和 eax 組合在一起放一個雙字長數,edx用來存放高位數字。
ebx通常作為記憶體偏移指標使用(相對於eax、ecx、edx)基址暫存器。
ebp基址指標暫存器,可作為堆疊區中的基值地址以便訪問堆疊中的其他資訊。這也是一個作為指標的暫存器。通常,它被高階語言編譯器用以建造‘堆疊幀’來儲存函式或過程的區域性變數
esp堆疊指標暫存器,表示棧頂的偏移地址。記錄當前堆疊的使用情況(用到哪兒了)
esi變址暫存器,原地址指標暫存器,一般與 eds配合使用,有自動增減量的功能。movs指令中的源地址指標
edi變址暫存器,目的地址指標暫存器,一般與 eds 配合使用,有自動增減量的功能。movs指令中的目的地址指標
eip指向cpu當前執行的**位置
那現在來講講我們脫殼時候經常看到了pushad和popad
pushad是將 8 個32位通用暫存器的內容順序入棧。入棧順序是eax,ecx,edx,ebx,esp,ebp,esi,edi
這時候入棧的esp資料是執行pushad之前的值。執行該指令後,esp 值減 32 (十進位制32)
popad是將當前堆疊內容順序彈出,esp 也恢復原來的值,即加32。然後是pusha與popa,其實都一樣,只不過就是16位的。
入棧順序是:ax,cx,dx,bx,sp,bp,si,di,執行完成後同樣sp 值減 16 (十進位制16)popa也是和32位一樣,只不過sp不是加32,而是加16。
6個段暫存器,分別是幹什麼的?
cs**段(存放**段的段地址)
ds資料段(存放資料段的段地址)
es附加資料段
ss堆疊段(存放堆疊段的段地址)
fs附加段
gs附加段
我們通常看他們的值來控制跳轉成功與否。他們受到比較與運算的影響來變換數值,從而讓跳轉成功或失敗。
c進位標誌,記錄運算結果的符號,結果為負數時則1,否則 0
p奇偶標誌,用來為機器中傳送資訊時可能產生的**出錯情況聽歌檢驗條件。當結果運算元中 1 的個數為偶數時置 1,否則置 0
a輔助進位標誌位
z零標誌,運算結果為 0 時 zf 位置 1,否則置 0
s符號標誌,記錄運算結果的符號,結果為負時置 1,否則置 0
t中斷允許標誌位,由 cli,sti 兩條指令來控制
d向量標誌位,由 cld,std 兩條指令來控制
o溢位標誌,在運算元超出了計算能表示的範圍稱為溢位
然後我們說說“定址”的那些事
立即定址,這種定址方式下,運算元以常量的形式出現在指令中
比如下圖,jmp shark恆.00513426
意思是無條件跳轉到記憶體00513426處,其中00513426是立即數。這叫做立即定址。
儲存器定址分為直接定址與間接定址。
直接定址是帶方括號的常量或是變數。ds是運算元預設的段暫存器。
如下圖所示,ba520073處的內容與ah暫存器相加後,結果給ba520073
暫存器間接定址
下圖內容是ds為資料段段地址,edi暫存器的內容為偏移地址,與al做比較。
暫存器相對定址
什麼是相對定址? 就是在間接定址的基礎上和立即數做一個加法運算。請看下圖
基址變址定址
也很容易理解,就是基址+變址在方括號裡,如下圖
什麼是基址,什麼是變址,我們在剛才講過了,可以向上看。
相對基址變址定址
這名字真長啊,不過也很好理解。
還記得剛才的暫存器相對定址嗎?方括號內有個立即數與暫存器做加法,就叫暫存器相對定址。如果沒有立即數做加法,那就叫暫存器間接定址。
然後結合我們剛才的基址變址定址,我們在與一個立即數做加法,請看下圖。
前面2個暫存器相加,我們學過了,叫基址變址定址,然後又加上一個立即數,我們管他叫“相對”,那3個在一起,就是“相對基址變址定址”。
通用暫存器各自的作用
暫存器作用 eax儲存某一個程式執行完畢後得到的結果 ecx作計數器使用,比如rep這個指令的執行次數就要從ecx暫存器中讀取 edx在某些運算中作為eax的溢位暫存器,例如乘 除的運算 ebx通常作為記憶體偏移指標使用 相對於eax ecx edx ebp這也是一個作為指標的暫存器。通常,它被高階...
通用暫存器的作用
通用暫存器可用於傳送和暫存資料,也可參與算術邏輯運算,並儲存運算結果。除此之外,它們還各自具有一些特殊功能。組合語言程式設計師必須熟悉每個暫存器的一般用途和特殊用途,只有這樣,才能在程式中做到正確 合理地使用它們。表2.1 通用暫存器的主要用途 暫存器的分類 暫存器主 要 用 途 通 用寄 存 器 ...
CPU各暫存器的作用
cpu各暫存器的作用 asm 暫存器作用 ebp和esp是32位的sp,bp esp是堆疊指標 ebp是基址指標 esp與sp的關係就象ax與al,ah的關係.32位cpu所含有的暫存器有 4個資料暫存器 eax ebx ecx和edx 2個變址和指標暫存器 esi和edi 2個指標暫存器 esp和...
暫存器(通用暫存器)
因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...
程式暫存器與指令暫存器
1 程式儲存器 program storage 在計算機的主儲存器中專門用來存放程式 子程式的一個區域。2 指令暫存器 ir 用來儲存當前正在執行的一條指令。當執行一條指令時,先把它從記憶體取到資料暫存器 dr 中,然後再傳送至ir。指令劃分為操作碼和地址碼欄位,由二進位制數字組成。為了執行任何給定...
通用返回 暫存器 通用暫存器
就像人的正常生活需要吃喝拉撒,一個程式的執行也需要各方面的東西,如堆 棧和暫存器,今天首先談一下暫存器。如果使用過od x64dbg之類的偵錯程式,可以發現彙編 中大多是對暫存器進行操作。為什麼要使用它?這是由於暫存器屬於cpu中的一塊儲存區域,擁有著非常高的讀寫速度,而程式執行最重要的就是快 和男...
CS 暫存器 和 IP 暫存器
下面將要介紹的是一組非常非常重要的暫存器,即 cs ip cs ip 兩個暫存器指示了 cpu 當前將要讀取的指令的地址,其中cs 為 段暫存器,而ip 為指令指標暫存器。什麼叫做指示了 cpu 當前將要讀取的指令呢?在 8086 cpu 中,為什麼 cpu 會自動的執行指令呢?這些指令肯定是存放在...
ARM彙編中lr r14)暫存器的作用
lr r14 的作用問題,這個lr一般來說有兩個作用 1.當使用bl或者blx跳轉到子過程的時候,r14儲存了返回地址,可以在呼叫過程結尾恢復。2.異常中斷髮生時,這個異常模式特定的物理r14被設定成該異常模式將要返回的地址。另外注意pc,在除錯的時候顯示的是當前指令地址,而用mov lr,pc的時...
crh暫存器 STM32 儲存器與暫存器
一 暫存器 通過給有特定功能的記憶體單元起一個別名,這個別名就是我們所說的暫存器。換句話說,暫存器就是一些有特定功能的記憶體單元。二 暫存器對映 給已經分配好地址的有特定功能的記憶體單元起別名的過程就叫暫存器對映。三 訪問stm32暫存器 訪問stm32暫存器也就是操作stm32的記憶體單元,根據c...
CPU中暫存器作用及說明
各種計算機的cpu可能不同,但是在cpu中至少至少要有六類暫存器 指令暫存器 ir 程式計數器 pc 資料地址暫存器 ar 緩衝暫存器 dr 通用暫存器 r0 r3 狀態字暫存器 psw 資料緩衝暫存器 dr 資料緩衝暫存器用來暫時存放alu的運算結果,或由資料儲存器讀出的一個資料字,或來自外部介面...