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指令集---------------------------------------------------------------------