标志寄存器
EFLAGS寄存器
1.进位标志CF
运算结果的最高位产生进位或者借位,那么CF=1
注:前提是要确定数据宽度
2.奇偶标志PF
反映运算结果中'1'的个数,若个数为偶PF=1,为奇则PF=0
注:结果转为二进制,数1的个数
3.辅助进位标志AF
1)在字操作时,发生低字节向高字节进位或者借位时,AF=1
2)在字节操作时,发生低4位向高4位进位或借位时,AF=1
1.32位 0x343EFFFF
16位 0x12FE
8位 0xFE
注:当红色位数进位,被借位时,AF=1。
4.零标志ZF
运算结果为0,则ZF=1
注:XOR EAX,EAX //将EAX清零,即EAX=00000000。ZF=1
5.符号标志SF
反应运算结果的符号位,它与运算结果的最高位相同
注:最高位要转为二进制(SF=0,1)
6.溢出标志OF
反映有符号数加减运算所得结果是否溢出
如果运算有符号,所得结果超过当前运算位数所能表示的范围则称为溢出
eg:0~7F为正,80~FF为负
注:1).正+正=正, 若等于负数,则说明有溢出=1
负+负=负, 若等于正数,则说明有溢出
正+负, 永远都不会有溢出
2.)有符号数看OF是否溢出
无符号数看CF
其他指令
ADC
带进位加法(eg:1+2=4)
格式:ADC R/M,R/M/IMM //r—寄存器,m—内存,IMM—立即数
注:不能同为内存
宽度一致
SBB
带借位减法(eg:4-2=1)
格式:SBB R/M,R/M/IMM
XCHG
交换数据
格式:XCHG R/M,R/M
MOVS
移动数据
eg:MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]==MOVSW
//从内存编号ESI中取出四个字节,放入内存编号EDI中,放四个字节
原EDI地址里的值,与原ESI地址里的值相等
EDI与ESI的地址各加了四
若把DWORD改为WORD,D位=0时,各加四
STOS指令
将AI/AX/EAX的值存储到[EDI ]指定的内存单元
具体是AI/AX/EAX,看STOS后面的数据宽度
如图:将12345678存入EDI中,宽度为一个字节。EDI地址具体是加还是减,根据D位,D位为1—则为减
这是目前
原EDI地址里的值存入了EAI的值,由于D位=1,所以EDI地址减四
REP
按计数寄存器(ECX)中指定的次数重复执行字符串指令
eg:重复16次(16进制)MOVSD指令
重复16次STOSD指令
标签:标志,运算,EDI,EAX,溢出,寄存器,进位 From: https://www.cnblogs.com/yuli10952/p/18231697