概述
知识点:
l 标志位 置位相关指令
l 标志寄存器PSW
标志寄存器PSW(程序状态字寄存器PSW) 标志寄存器PSW是一个16为的寄存器。它反映了CPU运算的状态特征并且存放某些控制标志。8086使用了16位中的9位,包括6个状态标志位和3个控制标志位。
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|
|
|
| OF | DF | IF | TF | SF | ZF |
| AF |
| PF |
| CF |
|
|
|
|
|
|
|
|
| 零 标志 |
|
|
|
|
|
|
CF(进位标志位):当执行一个加法(减法)运算时,最高位产生进位(或借位)时,CF为1,否则为0。 ZF零标志位:若当前的运算结果为零,则ZF为1,否则为0。 SF符号标志位:该标志位与运算结果的最高位相同。即运算结果为负,则SF为1,否则为0。 OF溢出标志位:若运算结果超出机器能够表示的范围称为溢出,此时OF为1,否则为0。判断是否溢出的方法是:进行二进制运算时,最高位的进位值与次高位的进位值进行异或运算,若运算结果为1则表示溢出OF=1,否则OF=0 PF奇偶标志:当运算结果的最低16位中含1的个数为偶数则PF=1否则PF=0 AF辅助进位标志:一个加法(减法)运算结果的低4位向高4位有进位(或借位)时则AF=1否则AF=0
另外还有三个控制标志位用来控制CPU的操作,可以由程序进行置位和复位。 TF跟踪标志:该标志位为方面程序调试而设置。若TF=1,8086/8088CPU处于单步工作方式,即在每条指令执行结束后,产生中断。 IF中断标志位:该标志位用来控制CPU是否响应可屏蔽中断。若IF=1则允许中断,否则禁止中断。 DF方向标志:该标志位用来控制串处理指令的处理方向。若DF=1则串处理过程中地址自动递减,否则自动递增。
OD里能查看到 除IF标志外的 8个标志位
JMP //014
JE/JZ //= //012 Jump if Equl
JNE/JNZ //不= //013
//带符号数条件转移指令
JL /JNGE //不>= //小于 < //015
JLE/JNG //不> //小于等于<= //016
JG/JNLE //不<= //大于 >//017
JGE/JNL //不< //大于等于>= //017
Jump 跳转/转移
Not 不
Equal 相等
Zero 零
Less 小于
Greater 大于
一、条件转移指令(cmp)
助忆符 | 检测的转移条件 | 功能描述 |
|
SETE/SETZ | ZF=1 | Jump Equal == | Jump Zero |
SETNE/SETNZ | ZF=0 | Jump Not Equal != | Jump Not Zero |
SETG/SETNLE | ZF=0&&SF=OF | Jump Greater > | Jump Not Less or Equal |
SETGE/SETNL | SF=OF | Jump Greater Equal >= | Jump Not Less |
SETL/SETNGE | SF!=OF | Jump Less < | Jump Not Greater or Equal |
SETLE/SETNG | ZF=1 || SF!=OF | Jump Less or Equal <= | Jump Not Greater |
条件置位指令
通用写法:SETxx reg8/mem8
作用:若条件xx成立,则dest=1,否则,dest=0;
SETxx有很多种命令形式,这里的xx只是一个描述符,具体的参见下面的三个表,其中,E(Equal)表示相等,G(Greatet)表示带符号大于,L(Less)表示带符号小于,A(Above)表示无符号大于,B(Below)表示无符号小于。
表一:用于带符号数比较的SETxx指令,这些指令常用在CMP指令之后,以判断带符号数的大小:
SETxx指令 | 描述 | 置1条件 |
SETG,SETNLE//jg/jnle | 大于(不小于等于)时置1 | SF=OF且ZF=0 |
SETGE,SETNL | 大于等于(不小于)时置1 | SF=OF |
SETL,SETNGE | 小于(不大于等于)时置1 | SF≠OF |
SETLE,SETNG | 小于等于(不大于)时置1 | SF≠OF或ZF=1 |
表二:用于无符号数比较的SETxx指令,常用在CMP指令之后,用来判断无符号数的大小:
SETxx指令 | 描述 | 置1条件 |
SETA,SETNBE | 大于(不小于等于)时置1 | CF=0且ZF=0 |
SETAE,SETNB,SETNC | 大于等于(不小于)时置1 | CF=0 |
SETB,SETNAE,SETC | 小于(不大于等于)时置1 | CF=1 |
SETBE,SETNA | 小于等于(不大于)时置1 | CF=1或ZF=1 |
表三:测试单个标志位的SETxx指令:
SETxx指令 | 描述 | 置1条件 |
SETC,SETB,SETNAE | 有进位时置1 | CF=1 |
SETNC,SETNB,SETAE | 无进位时置1 | CF=0 |
SETZ,SETE | 为0(相等)时置1 | ZF=1 |
SETNA,SETNE | 非0(不等)时置1 | ZF=0 |
SETS | 为负时置1 | SF=1 |
SETNS | 为正时置1 | SF=0 |
SETO | 溢出时置1 | OF=1 |
SETNO | 不溢出时置1 | OF=0 |
SETP,SETPE | ‘1’的个数为偶数时置1 | PF=1 |
SETNP,SETPO | ‘1’的个数为奇数时置1 | PF=0 |
转载于:https://www.cnblogs.com/whzym111/p/6374855.html
最后
以上就是自觉冰淇淋为你收集整理的汇编 OD 标志位 置位相关指令的全部内容,希望文章能够帮你解决汇编 OD 标志位 置位相关指令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复