彙編學習1 暫存器學習

2022-09-07 17:57:14 字數 4049 閱讀 4548

最近發現底層原理知識匱乏,故而重故一下彙編, 以便對系統攻防技術有更好的理解

暫存器總覽:

4個資料暫存器(eax、ebx、ecx和edx)

2個變址和指標暫存器(esi和edi) 2個指標暫存器(esp和ebp)

6個段暫存器(es、cs、ss、ds、fs和gs)

1個指令指標暫存器(eip) 1個標誌暫存器(eflags)

作用:暫存器是**處理器內的組成部分。暫存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、資料和位址。在**處理器的控制部件中,包含的暫存器有指令暫存器(ir)和程式計數器(pc)。在**處理器的算術及邏輯部件中,暫存器有累加器(acc) (來自百科)

下面對各類暫存器進行介紹:

1. 資料暫存器

作用:資料暫存器主要用來儲存運算元和運算結果等資訊,從而節省讀取運算元所需占用匯流排和訪問儲存器的時間

暫存器中資料儲存:

在記憶體中時,由於記憶體單元是位元組單元,剛乙個字要用2個位址連續的記憶體單元來存放,字的低位位元組存在低位址單元.

0位址單元中存放的位元組型資料為20h,0位址單元中存放的字型資料為4e20h,2位址單元中存放的位元組型資料為12h,2位址單元中存放的字型資料為0012h

彙編命令:

2.段暫存器

作用:段暫存器

是因為對記憶體的分段管理而設定的。計算機需要對記憶體分段,以分配給不同的程式使用(類似於硬碟分頁

處理方式:8086cpu有20根位址線,最大可定址記憶體空間為1mb。而8086的暫存器只有16位,指令指標(ip)和變址暫存器(si、di)也是16位的。用16位的位址定址1mb空間是不可能的。所以就要把記憶體分段,

也就是把1mb空間分為2^4,即16個段,每段不超過64kb(2^16,16位資料線就可以定址)

各個暫存器介紹:

段暫存器cs:指向存放程式的記憶體段,ip是用來存放下條待執行的指令在該段的偏移量,把它們合在一起可在該記憶體段內取到下次要執行的指令

段暫存器ss:指向用於堆疊的記憶體段,sp是用來指向該堆疊的棧頂,把它們合在一起可訪問棧頂單元。另外,當偏移量用到了指標暫存器bp,則其預設的段暫存器也是ss,並且用bp可訪問整個堆疊,不僅僅是只訪問棧頂

段暫存器ds:指向資料段,es指向附加段,在訪問運算元時,二者之一和乙個偏移量合併就可得到儲存單元的實體地址。該偏移量可以是具體數值、符號位址和指標暫存器的值等之一,具體情況將由指令的定址方式來決定

通常,預設的資料段暫存器是ds,只有乙個例外,即:在進行串操作時,其目的位址的段暫存器規定為es。當然,在一般指令中,我們還可以通過改變字首中的「段取代」欄位來改變運算元的段暫存器

「可選用的段暫存器」即是可以用強置說明這些段暫存器的值來作為其運算元位址的段位址

3. 指標暫存器

ss, sp, bp 三個暫存器

ss:存放棧的段位址;

sp:堆疊暫存器sp(stack pointer)存放棧的偏移位址;

bp: 基數指標暫存器bp(base pointer)是乙個暫存器,它的用途有點特殊,是和堆疊指標sp聯合使用的,作為sp校準使用的,只有在尋找堆疊裡的資料和使用個別的定址方式時候才能用到

sp,bp一般與段暫存器ss 聯用,以確定堆疊暫存器中某一單元的位址,sp用以指示棧頂的偏移位址,而bp可 作為堆疊區中的乙個基位址,用以確定在堆疊中的運算元位址

引用)

舉個栗子:

呼叫函式test(int p1,int p2)的彙編**

;假設執行函式前堆疊指標esp為nn

push p2 ;引數2入棧, esp -= 4h , esp = nn - 4h

push p1 ;引數1入棧, esp -= 4h , esp = nn - 8h

call test ;壓入返回位址 esp -= 4h, esp = nn - 0ch (注意call指令會把返回位址壓入堆疊)

;//進入函式內

原來esp就是一直指向棧頂的指標,而ebp只是訪問某時刻的棧頂指標,以方便對棧的操作,如獲取函式引數、區域性變數等

4.控制暫存器

flag暫存器如下圖:

下面我們就按不同的位來分別介紹這些位所描述的狀態,以及它們代表的意義:

cf(carry  flag) - 進製標誌(第 0 位):

cf:    進製標誌是用來反映計算時是否產生了由低位向高位的進製,或者產生了從高位到低位的借位 。

if(運算過程中產生了進製或者借位)

else

pf(parity  flag) - 奇偶標誌(第 2 位):

if(運算結果中 1 的個數為偶數)

else

af(auxiliary  carry  flag) - 輔助進製標誌(第 4 位):af:    用來輔助進製標誌 。

if(位元組操作中發生低半個位元組向高半個位元組借位或者進製  ||  字操作中發生低位元組向高位元組借位或者進製)

else

zf(zero  flag) – 零標誌(第 6 位):

if(執行的結果  ==  0)

else

sf(sign  flag) - 符號標誌(第 7 位):

if(運算結果為負數)

else

tf(trap  flag) - 追蹤標誌(第 8 位):tf:    追蹤標誌,主要是用於除錯時使用 。

if(tf  ==  1)

if(interrupt-enable  flag) - 中斷允許標誌(第 9 位):if:    中斷允許標誌,其決定  cpu  是否能夠響應外部可遮蔽中斷請求(以後會做詳細介紹) 。

if(if  ==  1)

else

df(direction  flag) - 方向標誌(第 10 位):df:    方向標誌,其用於在串處理指令中,用來控制每次操作後  si  和  di  是自增還是自減 。

if(df == 0)

else

of(overflow  flag) - 溢位標誌(第 11 位):of:    溢位標誌,其通常記錄了有符號數運算的結果是否發生了溢位 。

if(運算發生溢位)

else

總結:彙編之旅就此開始了, 自己看了一下,寫的多有不足之處,日後慢慢改正向前輩學習了,此次想學習彙編並不是要從事彙編

程式設計,更多的是提公升一下內功,對計算機理解更透徹一些,另外也是想能看懂別的有深度一點的書

彙編學習 暫存器1

典型的cpu由運算器 控制器 暫存器等器件構成,這些器件靠內部匯流排進行資訊傳送。匯流排分為內部匯流排和外部匯流排,內部匯流排實現cpu內部各個器件的聯絡,外部匯流排實現cpu和主機板上其他器件的聯絡 程式設計師通過改變各種暫存器的內容來實現對cpu的控制 在進行資料傳送或運算時,要注意指令的兩個操...

彙編學習(3)暫存器

暫存器 cpu的構成 乙個典型的cpu是由運算器 控制器 暫存器等器件構成,這些器件靠內部匯流排相連。各器件的聯絡 運算器進行資訊處理 暫存器進行資訊儲存 控制器控制各器件進行工作 內部匯流排連線各種器件。通用暫存器 ax bx cx dx這4個暫存器通常用來存放一般性的資料,被稱為通用暫存器。80...

彙編學習筆記(2)暫存器

本篇文章是組合語言 王爽 一書的學習筆記,對應書中的第 二 三章,暫存器。cpu主要是由運算器 暫存器和控制器組成,這一篇筆記主要是暫存器相關知識的學習總結,考慮到通用性,用8086cpu來學習。本次筆記共涉及8086cpu中的7個暫存器 總數14個 分別是ax,bx,cs,ip,ds,ss,sp。...