寄存器可以分為兩大類,一類為通用寄存器,一類為指針寄存器和變址寄存器。
通用寄存器
通用寄存器主要包括:EAX、EBX、ECX、EDX
EAX
Accumulator 累加器,其中EAX(32位)、AH(16位)、AX,AL(8位)
累加器用作乘除法時由特殊用途,但通常情況下視為通用寄存器
EBX
Base 基址寄存器,其中EBX(32位)、BH(16位)、BX,BL(8位)
基址寄存器用作存放訪問存儲單元的偏移地址
ECX
Count 計數器,其中ECX(32位)、CH(16位)、CX,CL(8位)
CL用於移位和循環移位計數,CX用作重復的串操作指令計數,CX或ECX用作LOOP/LOOPD計數
EDX
Data 數據寄存器,其中EDX(32位)、DH(16位)、DX,DL(8位)
數據寄存器是一個用用寄存器,在乘除法運算時也可用於記錄部分積和部分被除數
指針寄存器和變址寄存器
指針寄存器和變址寄存器包括:ESP、EBP、ESI、EDI
ESP
Stack Pointer 堆棧指針寄存器,該指針用於存儲堆棧存儲器數據
EBP
Base Pointer 基址指針寄存器,該指針用於存放堆棧段的數據區的“基地址”
ESI
Source Index 源變址指針寄存器,用於尋址串操作指令的源數據串
EDI
Destination Index 目的變址指針寄存器,該指針用於尋址串操作指令的目的數據串
EPI
Instruction Pointer 指令指針寄存器,一種專用寄存器,用於尋址當前需要取出的指令字節
Tip:需要注意的是,程序員不能對EIP/IP進行存取操作,程序中的轉移指令、返回指令和中斷處理能夠對EIP/IP進行存取
標志寄存器
9個標志位中,6個狀態標志位(CF、PF、AF、ZF、SF、OF),3個控制標志位(TF、IF、DF)
狀態標志位
CF:進位標志(Carry flag)。執行算數運算時,結果的最高位有進位或者借位,則CF=1;否則CF=0。
PF:奇偶標志(ParityFlag)。結果的低8位,有奇數個“1”,則PF=0;有偶數個“1”,則PF=1。
AF:半進位標志(Auxiliary carry Flag,也稱為半進位標志)。本次運算第四位有進位,則AF=1;否則AF=0。
ZF:零標志位(Zero Flag)。結果為0,則ZF=1;否則ZF=0。
SF:符號標志(Sign Flag)。結果為正,則SF=0;否則SF=1。
OF:溢出標志(OverFlow Flag)。結果溢出,則OF=1;否則OF=0。
溢出不一定有進位,有進位也不一定溢出。
例如:
CF=0 PF=0 AF=0 ZF=0 SF=1 OF=1
溢出判斷:兩個有符號數,符號位相同,運算結果的符號位與他們不同,則溢出,OF=1
方向標志位
方向標志DF(Direction Flag)
DF用於控制串操作指令的執行。
DF=0,則串操作指令地址自動增量修改。傳輸的傳送過程從低地址向高地址的方向進行;
DF=0,則串操作指令地址自動減量修改,傳數據的傳送過程從高地址向低地址的方向進行。
設置DF的方法:STD(DF置一),CLD(DF置零)
中斷標志IF(Interrupt Flag)
IF用來控制對可屏蔽中斷的響應。
IF=1,則允許CPU響應可屏蔽中斷請求;
IF=0,則禁止CPU響應可屏蔽中斷請求。
STI(IF置一),CLI(IF置零)。
IF只能控制CPU是否能夠響應可屏蔽中斷請求,而對不可屏蔽中斷及內部中斷無法控制.
陷阱標志TF(Trap Flag)
TF=1,微處理器單步工作;
TF=0,微處理器正常工作。