标志寄存器

标志寄存器

EFLAGS寄存器

 

1.进位标志CF

运算结果的最高位产生进位或者借位,那么CF=1

借位时,是最高位借位,不是借最高位的我

注:前提是要确定数据宽度

2.奇偶标志PF

反映运算结果中最低有效字节'1'的个数,若个数为偶PF=1,为奇则PF=0

注:结果转为二进制,数1的个数

        只看最后八位'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为负

 

CPU如何判断:

1000 0000

1100 0000

红色代表最高位

绿色代表最高有效数值位

注: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指令

posted @ 2024-06-05 14:26  雨里青山隐  阅读(34)  评论(0编辑  收藏  举报