标志寄存器

push,pop指令补充:

push的是立即数:减4

push的是寄存器:减寄存器宽度

(不能push8位寄存器和内存)

pop指令同样不能pop8位容器

pop指令加几取决与后面容器宽度

pushad指令:

把八个通用寄存器存到堆栈

存完后可以随意修改值,使用寄存器(esp.ebp值不要修改)

a5ff34e8927a4562824e39d1f9f1aa49.png

 popad指令:

在使用完寄存器后恢复寄存器原来的状态,保护现场

f5baecfed6a0495d9518255784d6f44b.png

 标志寄存器:

b74d2143e67a484d9751b6884cf78ce3.png

 如何拆?

5da14005642f4639b4d25a54d7311f32.png

 显示的c.p.a.z...等是拆好的

如果没拆好看到EFL的202

202对应的二进制形式为001000000010即对应c.p.a.z...8a92b533879945ff9005c293fd113fb1.png

 CF:

13def3c7963245979bc8d21016e42c1c.png

此时al为0xff再加一越位,进位的1到cf中 (不会到ah中)c2238e792d2d49a08ef82a1e69b321d8.png

 PF:

3231b4b8e48b429fbd196c1ad278e7f9.png

 例如:b40440b6f7a84f17b74ff04ca60d42c8.png

 AF:

01f4e9130d124b818caf426a3e8c55df.png

位数一半的位置进位则变1

 即32位时ffffffff

      16位时ffff   

       8位时ff

进位时af会变一

注意:mov指令不影响标志寄存器

ZF:

b64c05b4e7884ce1a2c06aa4267c5374.png

 xor指令是做异或运算,会影响标志寄存器的值(mov不会)对寄存器做xor运算是清零运算

SF:

8596440e08d24201864ad1e25bc95182.png

 最高位是相对于数据宽度而言。例如:al最高位为二进制数第8位,ax最高位为二进制数16位

OF:

溢出时为1不溢出时为0

注意:有符号时考虑OF,看OF变化

无符号位考虑CF,看CF变化cb9a2c149c6646ef8523448750a79c2b.png

3965859eae4d453b9c2fba03599e39bd.png

 ADC指令:

fd663b0cc20b4f42b97de33c1ba90063.png

 例如:

6f1a29c859c44be988e2ad50babc6ac4.png

 在12ffc4中加2本来应变为3D,但CF的值为1也参与运算,变为3E.

SBB指令:

3d531dc29b5d497faca81eb8a7fb4435.png

 XCHG指令:69ebfe170ca34565a59f796d60e4660a.png

 MOVS指令:

可以两边都是内存

39d852668b464542bc9be79ae4ca80ef.png

 9641292b758b49a2a07f8553f5a4cf2a.png

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值