匯編指令和寄存器


8個32位通用寄存器按順序分別是:

EAX 通常用來保存函數的返回值

ECX 用作計數器

EDX 

EBX 

ESP 棧頂指針寄存器 保存棧頂地址 

EBP 棧底指針寄存器 保存棧底地址

ESI  源變址寄存器 MOVS 或 STOS等指令

EDI  目的變址寄存器

8個16位通用寄存器:

AX  CX  DX  BX  SP  BP  SI DI

8個8位通用寄存器:

AH  AL  CH  AL  DH  DL  BH  BL

EIP 寄存器 保存下次程序要執行的基址

標志寄存器位置和作用

 

EFL  對應的16進制轉換為2進制就是每個標志寄存器對應的值

CF  0位 無符號進位標志

PF   2位  最后8位的1的奇偶標志

AF   4位  輔助進位,借位標志

ZF   6位   零標志

SF   7位   符號標志

OF   11位  有符號溢出標志     當0-7F中的正數相加等於負數時有溢出,當80-FF中的負數相加等於正數時有溢出,正數加負數永遠不會溢出。

DF   10位  方向標志         當時候 movs  或  stos時可以使用DF控制內存的方向  0為+   1為-

 

mov  移動指令

add   加

sub   減

or      或

and   與

xor    異或

movs  移動ESI指向的內存地址的數據到EDI指向的內存地址中   簡寫方法  movsb   movsw   movsd  

movsx  有符號數類型轉換    一般用於數據寬度從小到大擴展使用,如果數據寬度從大到小會從最低位開始截取數據

movzx 無符號數類型轉換  一般用於數據寬度從小到大擴展使用,如果數據寬度從大到小會從最低位開始截取數據

stos    MAX中的數據移動到EDI指向的內存地址中   簡寫方法  stosb   stosw   stosd

ADC   借位加如果CF標志的值為1   會多加1

SBB    借位減如果CF標志的值為1   會多減1

XCHG   交換指令

SAL  算術左移最高位進CF位最低位補0

SAR  算術右移最低位進CF並且最低位補充到最高位

SHL  邏輯左移最高位進CF位最低位補0

SHR  邏輯右移最低位進CF最高位補0

ROL  循環左移最高位進CF並且最高位補充到最低位

ROR  循環右移最低位進CF並且最低位補充到最高位

RCL  帶進位的循環左移最高位進CF,原始的CF位補充到最低位

RCR  帶進位的循環右移最低位進CF,原始的CF位補充到最高位

PUSH   入棧指令   把數據入棧並且棧頂地址會向上移動4個字節  就是-4

POP    出棧指令     把棧頂的數據取出存入寄存器,棧頂地址會向下移動4個字節   就是+4

CMP 單純的比較指令不改變值,通常用來修改ZF標志寄存器

TEST 單純的與指令不改變值,通常用來修改ZF變值寄存器

JMP 修改EIP寄存器的值

CALL 修改EIP寄存器的值,並把下一行要運行的基址PUSH到棧頂位置

RET  返回到CALL指令PUSH到棧頂的基址,並把棧頂的值POP出來

REP 按ECX中存放的數量循環執行指令

-----------------------------------------------------------JCC指令集---------------------------------------------------------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM