$0(0000)、$1(0001)、$2(0010)、$3(0011)、$4(0100)、$5(0101)、$6(0110)、$7(0111 )
$8(1000)、$9(1001)、$A(1010)、$B(1011)、$C(1100)、$D(1101)、$E(1110)、$F(1111)
esp定律指的也是堆棧平衡原理,esp是x86用於保存棧頂指針的寄存器
```
```
通用寄存器 |16位 |32位 |64位
---------------------------
累加寄存器 |AX |EAX |RAX
基址寄存器 |BX |EBX |RBX
計數寄存器 |CX |ECX |RCX
數據寄存器 |DX |EDX |RDX
堆棧基指針 |BP |EBP |RBP
變址寄存器 |SI |ESI |RSI
堆棧頂指針 |SP |ESP |RSP
指令寄存器 |IP |EIP |RIP
```
```
8位的半寄存器(通用寄存器)AH、AL、BH、BL、CH、CL、DH、DL
16位指針寄存器:IP
32位指針寄存器:EIP
16位段寄存器:CS、DS、SS、ES(FS、GS)
標識寄存器:flags/eflags
16位段寄存器,主要功能是將其用於存儲段地址 eax,ebx,ecx,edx;ax,bx,cx,dx;ah,al,bh,bl,ch,cl,dh,dl
```
```
IP和EIP專用指針寄存器,存儲當前代碼段中下一條即將執行的機器指令的偏移地址
```
```
通常寄存器:AX、BX、CX、DX
AX:累積暫存器,BX:基底暫存器,CX:計數暫存器,DX:資料暫存器
索引暫存器:SI、DI
SI:源索引暫存器,DI:目的索引暫存器
```
```
指針寄存器: 堆棧指針寄存器SP、stack pointer; 基數指針寄存器BP、base pointer
值寄存器包括: 源變址寄存器SI、source index; 目的變址寄存器DI、destination index
4個寄存器都是16位寄存器,這些寄存器在運算過程當中也能夠用來存放操做數(只能以字爲單位),但常常的用途是在段內尋址時提供[偏移地址]
SP,BP通常與段寄存器SS聯用,以肯定堆棧寄存器中某一單元的地址,SP用以指示棧頂的[偏移地址],而BP可做爲堆棧區中的一個基地址,用以肯定在堆棧中的操做數地址。
SI,DI通常與段寄存器DS聯用,以肯定數據段中某一存儲單元的地址,SI,DI具備自動增量和自動減量的功能,這一點使在串操做指令中用作變址很是方便,SI做爲隱含的源變址DS聯用,DI做爲隱含的目的變址和ES連用,從而達到在數據段和附加段中尋址的目的程序員
```
```
ESP 專門用做堆棧指針,被形象地稱爲棧頂指針,堆棧的頂部是地址小的區域,壓入堆棧的數據越多,ESP也就愈來愈小。在32位平臺上,ESP每次減小4字節。
EBP 是"基址指針"(BASE POINTER), 它最常常被用做高級語言函數調用的"框架指針"(frame pointer). 在破解的時候,常常能夠看見一個標準的函數起始代碼:框架
ESP:棧指針寄存器(extended stack pointer),其內存放着一個指針,該指針永遠指向系統棧最上面一個棧幀的棧頂。
EBP:基址指針寄存器(extended base pointer),其內存放着一個指針,該指針永遠指向系統棧最上面一個棧幀的底部。函數
esp:寄存器存放當前線程的棧頂指針
ebp:寄存器存放當前線程的棧底指針
eip:寄存器存放下一個CPU指令存放的內存地址,當CPU執行完當前的指令後,從EIP寄存器中讀取下一條指令的內存地址,而後繼續執行。
```
```
4個數據寄存器(EAX、EBX、ECX和EDX)
32位CPU有4個32位的通用寄存器EAX、EBX、ECX和EDX。
對低16位數據的存取,不會影響高16位的數據。這些低16位寄存器分別命名爲:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4個16位寄存器又可分割成8個獨立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每一個寄存器都有本身的名稱,可獨立存取。程序員可利用數據寄存器的這種「可分可合」的特性,靈活地處理字/字節的信息。
```
```
eax是32位寄存器,ax是16位寄存器,al(ah)是八位寄存器。那麼eax存儲的數據就是ax的兩倍,ax是al(ah)的兩倍。
eax能夠存儲的是DWORD(雙字)ax存儲的是WORD(字)AL(AH)存儲的是BYTE(字節),那麼爲何又有AH和AL呢,咱們能夠這樣理解,AX=AH+AL,AH存儲的是AX的高8位數據,AL存儲的是AX的低八位數據。H這裏就是HIGH,L就是LOW.線程
```
```
位:數據的最小單元是一位、一位只能表示兩個不一樣的數值(0或1),
半字節:是4位一組的數據類型、
字節(byte):一個字節由8位組成、是最小可編址數據單元、8086的主存和I/O地址都是字節地址、
字(word):是一個16位的組、2個字節
雙字(dword):是一個32位的組、由兩個字組成、
四字(qword):是一個64位的組、由四個字組成、
長字(lword):是一個128位的組、由八個字組成、
```
```
與運算、或運算、異或運算、非運算
計算機只會一種運算、那就是位運算
```
```
movb(8位)、movw(16位)、movl(32位)、movq(64位)
寄存器尋址: movl %eax, %edx
```
```
mov指令種類:1.普通的mov指令 2.作符號擴展的movs 3.作零擴展的movz
```指針