这里讲一个特殊的寄存器,flag
先看flag的16位显示
11.1 zf
指令执行后,结果0,ZF=1
指令执行后,结果不为0,ZF=0
11.2 pf
指令执行后,所有bit位中1的个数是否位偶数,若为偶数,那么pf=1
若为奇数,pf=0
11.3 sf
指令执行后,结果负,SF=1
指令执行后,结果不为负,SF=0
11.4 cf
进位
若出现进位,那么CF=1
没有的话CF=0
11.5 of
溢出,
数字的溢出。
8位范围是-128-127 若130就是溢出了
11.6 abc指令
abc a,b
a=a+b+CF
为啥需要这个东西呢?
加法可以分2步,
1 低位=低位加
2 高位=高位加+CF
把加法分步进行了
11.8 cmp指令
减法指令,但是不保存实际减法结果,就是用来影响flag的位
有4种情况把,自己总结的
1 sf=1,of =0 就A<B
2 sf=1,of=1 正溢出出现的负值,就是a-b是一个大的正数,要是8位的话,就是大于127的
3 sf=0,of=1 负溢出才会出现正值,那么a-b就是一个负数,要是8位的话,就是小于128的
4 sf=0 sf=1 没溢出,就很正常的比较大小
11.9 讲了一些条件转移指令
jczx 这种的
就和高级语言的if switch差不多把
11.10 串传送
DF =0 每次操作后 si,di 递增
DF=1 每次操作后si,di递减
movsb一次传一个内存单元,配合rep movsb使用
11.11 pushf popf
pushf 把标志寄存器的值入栈
popf 从栈中弹出数据,送到栈中
这里就讲一个flag寄存器,每个位都下设置0,1,起到不同的作用
EOF