汇编语言标志位CF及一些常用指令.docx
《汇编语言标志位CF及一些常用指令.docx》由会员分享,可在线阅读,更多相关《汇编语言标志位CF及一些常用指令.docx(9页珍藏版)》请在冰点文库上搜索。
汇编语言标志位CF及一些常用指令
汇编语言标志位(CF)及一些常用指令
英文翻译:
carry进位flag标志
NV:
nooverflowOV:
overflow
UP:
upDN:
down
DI:
disableinterruptEI:
enableinterrupt
PL:
plusNG:
negative
NZ:
nozeroZR:
zero
NA:
noassistantcarryAC:
assistantcarry
PO:
parityoddPE:
parityeven奇偶校验
NC:
nocarryCY:
carry
汇编标志位:
标志名标志1标志0OF(溢出标志)OVNV
DF(方向标志)UPDN
IF(中断标志)DIEI
SF(符号标志位)PLNG
ZF(零标志)NZZR
AF(辅助进位标志位)NAAC
PF(奇偶标志)POPE
CF(进位标志)NCCY
OF溢出(是/否)OVOVerflowNVNotoVerflow
DF方向(减量/增量)DNDowNUPUP
IF中断(允许/关闭)EIEnableInterruptDIDisableInterrupt
SF符号(负/正)NGNeGativePLPLus
ZF零(是/否)ZRZeRoNZNotZero
AF辅助进位(是/否)ACAuxiliaryCarryNANotAuxiliary
PF奇偶(是/否)PEParityEvenPOParityOdd
CF进位(是/否)CYCarrYNCNotCarry
英文解释:
NV:
nooverflowOV:
overflow
UP:
upDN:
down
DI:
disableinterruptEI:
enableinterrupt
PL:
plusNG:
negative
NZ:
nozeroZR:
zero
NA:
noassistantcarryAC:
assistantcarry
PO:
parityoddPE:
parityeven
NC:
nocarryCY:
carry
先熟悉一下FLAGS标志位:
OV、NV即溢出标志位OF=1或0,表示运算结果有无溢出。
当算术运算的结果超出了带符号数的范围(8位带符号数的范围是-128——+127,16位的是-32728——+32767)。
DN、UP即方向标志位DF=1或0,表示串操作时按地址减或加的方式进行。
EI、DI即中断标志位IF=1或0,表示CPU可否响应可屏蔽中断请求。
IF的状态对不可屏蔽中断及内部中断没有影响。
NG、PL即符号标志位SF=1或0,表示运算结果是负(最高位为1)或正(最高位为0)。
ZR、NZ即零标志位ZF=1或0,表示运算结果是0或非0。
AC、NA即辅助进位标志位AF=1或0,在8位加减法操作中表示低4位向高4位有无进借位。
PE、PO即奇偶标志位PF=1或0,表示逻辑运算结果中1的个数是否为偶数。
CY、NC即进位标志位CF=1或0,表示加减法操作中最高位有无进借位。
8086寄存器
通用寄存器
AH&AL=AX(accumulator):
累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界传送数据。
BH&BL=BX(base):
基址寄存器,常用于地址索引。
CH&CL=CX:
计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器。
DH&DL=DX:
数据寄存器,常用于数据传递。
段寄存器
CS(CodeSegment):
代码段寄存器
DS(DataSegment):
数据段寄存器
SS(StackSegment):
堆栈段寄存器
ES(ExtraSegment):
附加段寄存器
指针寄存器和变址寄存器
SP(StackPointer):
堆栈指针,与SS配合使用,可指向目前的堆栈位置。
BP(BasePointer):
基址指针寄存器,可用作SS的一个相对基址位置。
SI(SourceIndex):
源变址寄存器,可用来存放相对于DS段之源变址指针。
DI(DestinationIndex):
目的变址寄存器,可用来存放相对于ES段之目的变址指针。
IP(InstructionPointer):
指令指针
PSW(ProgramStatusWord):
程序状态寄存器
ZF(ZeroFlag):
零标志位,用来反映运算结果是否为0。
如果运算结果为0,则其值为1,否则其值为0。
PF(ParityFlag):
奇偶标志位,用来反映运算结果中“1”的个数的奇偶性,如果“1”的个数为偶数,则PF的值为1,否则其值为0。
SF(SignFlag):
符号标志位,用来反映运算结果的符号位,它与运算结果的最高位相同。
CF(CarryFlag):
进位标志位,用来反映运算结果是否产生进位或借位,如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则为0。
OF(OverflowFlag):
溢出标志位,用来反映有符号数加减运算所得结果是否溢出。
如果运算结果超出当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
DF(DirectionFlag):
方向标志位,用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
IF(InterruptFlag):
中断标志位,IF=1处理可屏蔽中断,IF=0不出来可屏蔽中断。
TF(TraceFlag):
跟踪标志位,该标志可用于程序调试,没有专门的指令来设置或清除。
AF(AuxiliarycarryFlag):
辅助进位标志位,在字操作时,发生低字节向高字节进位或借位时;在字节操作时,发生低4位向高4位进位或借位时。
相关指令
abc(c-carry):
带进位加法指令。
它利用了CF位上记录的进位值。
sbb(b-borrow):
带借位减法指令。
它利用了CF位上记录的借位值。
cmp(compare):
比较指令。
它的功能相当于减法指令,只是不保存结果。
je(e-equal):
ZF=1则转移
jne(ne-notequal):
ZF=0则转移
jb(b-below):
CF=0则转移
jnb(nb-notbelow):
CF=0则转移
ja(a-above):
CF=0且ZF=0则转移
jna(na-notabove):
CF=1或ZF=1则转移
movesb(b-byte):
传送一个字节
movesw(w-word):
传送一个字
repmovesb(rep-repeat):
循环执行字节串传送指令
repmovesw(rep-repeat):
循环执行字串传送指令
cld(clearDF):
将DF置0
std(setDF):
将DF置1
pushf(pushflag):
将标志寄存器的值压栈
popf(popflag):
从栈中弹出数据送入标志寄存器
Debug中标志位的表示:
标志位值为1值为0
OF(OverflowFlag)OV(overflow)NV(nooverflow)
SF(SignFlag)NG(negative)PL(plus)
ZF(ZeroFlag)ZR(zero)NZ(nozero)
PF(ParityFlag)PE(parityeven)PO(parityodd)
CF(CarryFlag)CY(carry)NC(nocarry)
DF(DirectionFlag)DN(down)UP(up)
AF(AuxiliarycarryFlag)AC(assistantcarry)NA(noassistantcarry)
IF(InterruptFlag)EI(enableinterrupt)DI(disableinterrupt)
TF(TraceFlag)
AXBXCXDX是CPU内部的通用寄存器中的数据寄存器,数据寄存器一般用于存放参与运算的数据或运算的结果,每一个数据寄存器都是16位的(即16个二进制位),但又可以将高,低8位分别作为两个独立的8位寄存器使用.它们的高8位记作AH,BH,CH,DH,低8位记作
AL,BL,CL,DL.这种灵活的使用方法给编程带来极大的方便,既可以处理16位数据,也能处理8位数据.
数据寄存器除了作为通用寄存器使用外,它们还有各自的习惯用法
AX称为累加器,常用于存放算术逻辑运算中的操作数,另外所有的I/O指令都使用累加器与外设接口传送信息
BX称为基址寄存器,常用来存放访问内在时的基地址,
CX称为计数寄存器,在循环和串操作指令中用作计数器
DX称为数据寄存器,在寄存器间接寻址中的I/O指令中存放I/O端口的地址另外,在做双字长乘除法运算时,DX与AX合起来存放一个双字长数(32位),其中DX存放高16位,AX存放低16位.
AH&AL=AX(accumulator):
累加寄存器
BH&BL=BX(base):
基址寄存器
CH&CL=CX(count):
计数寄存器
DH&DL=DX(data):
数据寄存器
SP(StackPointer):
堆栈指针寄存器
BP(BasePointer):
基址指针寄存器
SI(SourceIndex):
源变址寄存器
DI(DestinationIndex):
目的变址寄存器
IP(InstructionPointer):
指令指针寄存器
CS(CodeSegment)代码段寄存器
DS(DataSegment):
数据段寄存器
SS(StackSegment):
堆栈段寄存器
ES(ExtraSegment):
附加段寄存器
OFoverflowflag溢出标志操作数超出机器能表示的范围表示溢出,溢出时为1.
SFsignFlag符号标志记录运算结果的符号,结果负时为1.
ZFzeroflag零标志运算结果等于0时为1,否则为0.
CFcarryflag进位标志最高有效位产生进位时为1,否则为0.
AFauxiliarycarryflag辅助进位标志运算时,第3位向第4位产生进位时为1,否则为0.PFparityflag奇偶标志运算结果操作数位为1的个数为偶数个时为1,否则为0.
DFdirecionflag方向标志用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.
IFinterruptflag中断标志IF=1时,允许CPU响应可屏蔽中断,否则关闭中断.
TFtrapflag陷阱标志用于调试单步操作.
寻址方式:
立即寻址MOVAX,常数
直接寻址MOVAX,[常数];加上中括号或MOVAX,变量名或标号
寄存器寻址MOVAX,通用寄存器
寄存器间接寻址MOVAX,[(BX,BP,SI,DI)中的一个];以下四行均需加上中括号
寄存器相对寻址MOVAX,[(BX,BP,SI,DI)中的一个+偏移量]
基址变址寻址MOVAX,[基址寄存器+变址寄存器]
相对基址变址寻址MOVAX,[基址寄存器+变址寄存器+偏移量]
XCHGOPRD1,OPRD2交换指令
地址传送指令
LEAREG,OPRD地址传送指令
LDSREG,OPRD(loadpointerintoDS)
LESREG,OPRD(LoadpointerintoES)
堆栈指令
进栈指令SP-2
PUSHSRC
出栈指令SP+2
POPDST
标志操作指令
(1)标志传送指令
LAHF(LoadAHwithFlags)把标志位寄存器的低8位传送到寄存器AH的指定位SAHF(StoreAHintoFlags)与LAHF相反(SFZFAFPFCF)
CLC(ClearCarryflag)清进位标志
CLD清方向标志
STD置方向标志
CLI清中断允许
STI置中断
ADC带进位的加法指令(Addandcarry)
incoprd加一指令(INCrement)
SUB减法指令(SUBtraction)
SBB带借位的减法(SuBtractwithBorrow)
DEC减一指令(DECrement)
Offset偏移值
test测试移位指令
AX:
Accumulator
BX:
Base
CX:
Cout
DX:
Date
SI:
SourceIndex
DI:
DestinationIndex
BP:
BasePointer
SP:
StackPointer
CF:
CarryFlag
ZF:
ZeroFlag
SF:
SignFlag
OF:
OverflowFlag
PF:
ParityFlag
AF:
AuxiliaryFlag
TF:
TrapFlag
IF:
InterruptFlag
AF:
AuxiliaryFlag
CS:
CodeSegment
DS:
DataSegment
ES:
ExtraSegment
SS:
StackSegment
段寄存器:
CSDSSSES