組合語言一些暫存器的作用

2021-08-08 13:10:34 字數 1253 閱讀 7886

首先,需要了解c語言中組合語言裡eax,ebx,ecx,edx,ebp,edi,esi;mov,sub,add,jmp,jn,test;push,pop,call,ret,lea;這些都是什麼意思。

eax,ebx,ecx,edx,esi,edi,dbp... ...都是x86組合語言中cpu上的通用暫存器的名稱,是三十二位的暫存器。如果用c語言來解釋,可以把這些暫存器當作變數來待。

x86是指三十二位作業系統。

三十二位暫存器有許多用途,但是每個都有自己的專長,有各自的特別之處。

eax 是 「累加器」,是很多加法乘法指令的預設暫存器。

ebx 是「基位址」,暫存器,在記憶體尋位址時存放位址。

ecx 是計時器,是重複字首指令和loop指令的內定計時器。

edx則是被用來放幀數除法產生的餘數。

esi/edi分別叫做「源/目標索引暫存器」。

ebp是"基址指標",他最經常被用作高階語言函式呼叫的「框架指標」在破解的時候,經常可以看見乙個標準的函式起始**;

push ebp;儲存當前的ebp

mov, ebp, esp ;ebp設為當前堆疊指標//mov(傳送)a(累加暫存器)#30h(十六進製制立即數) 將立即數30h(十六進製制)傳送到a裡面。

//堆疊指標:是乙個抽象的資料型別,規定的兩項必備的基本操作分別為入棧和出棧,並沒有規定入棧和出棧要怎麼實現。

sub  ,esp,***;預留***位元組給函式臨時變數... ...

這樣一來,ebp構成了函式的框架,在ebp上方分別是原來的ebp,返回位址和引數,ebp下面則是臨時變數,函式返回是用作mov,esp,ebp/pop ebp/ret即可。

esp專門用作堆疊指標,被形象的稱為棧頂指標,棧頂頂部是位址大小的區域,壓入堆疊的資料愈多,esp也就越小。三十二平台上,esp每次減少四位元組。

jmp 是組合語言中的無條件跳轉指令。無條件跳轉指令可轉到記憶體中任何程式段。轉移位址可在指令中給出,也可以在暫存器中給出,或在儲存器中指出。

test指令屬於邏輯運算指令,不送回操作結果,二僅僅影響標誌位。

lea指令的功能是將源運算元、即儲存單元的有效位址(偏移位址)傳送到目的運算元。lea有兩個運算元。左邊是目的運算元,表示操作結果儲存在此,該指令目的的運算元只能是八個通用暫存器之一。右邊的是源運算元,該指令的源運算元只能是乙個儲存單元,表達儲存單元有多重定址方式。

ret: 例如ret  8   意思是廢除壓入的eax,ebx;兩個引數(兩個暫存器占用了八個位元組);並返回繼續執行。

add是普通的加法指令,adc是帶進製的加法指令。

組合語言中暫存器的作用

對於8086的系統 1.暫存器按照功能的不同可分為通用暫存器 ax,bx,cx,dx,sp,bp,si,di。其中的前四個暫存器可分別分成ah,al bh,bl ch,cl dh,dl的八位暫存器 指令指標暫存器 ip 標誌暫存器 flags 段暫存器 cs,ds,es,ss 它們的區別和聯絡體現在...

組合語言 暫存器

乙個典型的cpu由運算器 控制器 暫存器等器件組成,這些器件靠內部匯流排相連。通用暫存器 ax bx cx dx 段位址暫存器 cs ds es ss 專用暫存器 bp sp si di 指令指標暫存器 ip 標誌暫存器 psw ah al ax accumulator 累加暫存器 bh bl bx...

組合語言 暫存器

乙個cpu由暫存器,運算器,控制器組成,暫存器負責儲存資料。通用暫存器 ax,bx,cx,dx。8086cpu的暫存器都是16位的,能存放兩個位元組。乙個暫存器又能分為兩個部分,乙個高位位元組如ah,還有乙個地位位元組如al。這兩個部分可以單獨看成乙個八位暫存器來用。當暫存器當整體來看時,它可以進行...