第012课 汇编-af,zf,sf,of及标志位操作指令

本文详细介绍CPU中的各种标志位,包括AF、ZF、SF、OF等的功能及应用,并讲解了标志位的操作指令如LAHF、SAHF、PUSHF等的作用方式。此外,还介绍了不同位宽下的寄存器使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AF,ZF,SF,OF
标志传送指令


内容纲要
1.AF,ZF,OF
2.LAHF,SAHF
3.PUSHF,POPF

4.PUSHFD,POPFD

5.STC,CLC,STD,CLD,CMC

6.32位,16位和8位寄存器


详细内容
1.AF
AF(Auxiliary_Flag):辅助进位标志位。运算过程中看最后四位,不论长度为多少。最后四位向前有进位或者借位,AF=1,否则AF=0;

2.ZF
ZF(Zero_FLag):零标志位。运算结果为零则ZF=1,否则ZF=0;

3.SF
SF(Sign_Flag):符号标志位。根据具体的长度,指令执行之后将该长度的最高位的值赋给SF

4.OF
OF(overflow):溢出标志位。
mov ds:[0x0012ff40],0x33
add ds:[0x0012ff40],0x4f  //of = 1,sf = 1,af = 1,pf=1,cf = 0
两个操作数做运算,只要结果在-128~127中,of = 0,否则of=1(一个字节),长度改变,范围也随之发生改变.

5.LAHF,SAHF
LAHF(Load Flag to AH):将EFL寄存器的最后一个字节放到AH寄存器中
SAHF(Store AH into Flags):将AH的内容放入EFL的最后一个字节,其中需要注意的是第二位默认为1,第4、6位为0.

6.PUSHF,POPF

16位,PUSHF是将寄存器中的值(后16位写入内存),

POPF是将内存中16位数值写入EFL的后两个字节,还是要注意标志位默认值的问题


7.PUSHFD,POPFD
32位,PUSHFD是将寄存器的值写入内存,而POPFD是将内存中的32位数值写入EFL,具体是哪一内存单元值由ESP决定。


8.STD,CLD,STC,CLC,CMC

STD(SeT Direction flag):格式如下:

STD

该条指令使方向标志DF为1.

CLD(Clear Direction flag)格式如下:

CLD

该条指令使方向标志DF为0.

STC,CLC同上。

CMC(CoMplement Carry flag)格式如下:

CMC

该条指令使进位标志取反。


8.通用寄存器
32位: EAX  ECX  EDX  EBX  ESP  EBP  ESI  EDI
16位:AX   CX   DX   BX   SP   BP   SI   DI
8位: AL   CL   DL   BL   AH   CH   DH   BH


课堂练习:
1.练习各标志位的值的改变
mov DWORD PTR ds:[0x0012ff40],0x3333
sub DWORD PTR ds:[0x0012ff40],0x3f  //af=1

mov DWORD PTR ds:[0x0012ff40],0x3333
add DWORD PTR ds:[0x0012ff40],0x3f  //af=1

mov WORD ptr ds:[0x0012ff40],0x3333
sub WORD ptr ds:[0x0012ff40],0x3f  //af=1

mov ds:[0x0012ff40],0x33
sub ds:[0x0012ff40],0xf3 //af=0

2.LAHF,SAHF,PUSHF,POPF,PUSHFD,POPFD,STD,CLD,STC,CLC,CMC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值