这篇文章主要介绍了汇编指令-状态寄存器、cmp、test、jz等指令详细说明,需要的朋友可以参考下
一、状态寄存器
首先看看:状态寄存器(即标志寄存器)
PSW(Program Status Word)程序状态字(即标志)寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,
如下所示:
test逻辑与运算结果为零,就把ZF(零标志)置1;
cmp 算术减法运算结果为零,就把ZF(零标志)置1。
对于jz和jnz,查看代码和理解汇编代码时,直接判断test和cmp的运算结果决定是否跳转,至于ZF标记位是系统得知运算结果的标记位。
三、 直接标志转移
指令格式 机器码 测试条件 如...则转移
JC 72 C=1 有进位
JNC 73 C=0 无进位
JZ/JE 74 Z=1 零/
JNZ/JNE 75 Z=0 不为零/
JS 78 S=1 负号
JNS 79 S=0 正号
JO 70 O=1 有溢出
JNO 71 O=0 无溢出
JP/JPE 7A P=1 奇偶位为偶
JNP/IPO 7B P=0 奇偶位为奇
四、间接标志转移
先用cmp指令比较再用下面的判断(少了一个 JE 为等于):
指令格式 机器码 测试格式 如...则转移
JA/JNBE() 77 CZ=0 >/
JAE/JNB() 73 C=0 >=/
JB/JNAE() 72 C=1 </
JBE/JNA() 76 CZ=1 <=/
JG/JNLE() 7F (SO)Z=0 >/
JGE/JNL() 7D SO=0 >=/
JL/JNGE() 7C SO=1 </
JLE/JNG() 7E (SO)Z=1 <=/
小结
test指令
将两个操作数进行逻辑与运算,并根据运算结果设置相关的标志位。test命令的两个操作数不会被改变。运算结果在设置过相关标记位后会被丢弃。
影响的标志位CF,ZF,OF,SF,PF
cmp指令
比较指令。cmp的功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
影响的标志位CF,ZF,OF,AF,PF
本文标题为:汇编指令-状态寄存器、cmp、test、jz等指令详细说明


- Golang http.Client设置超时 2023-09-05
- Ruby 迭代器知识汇总 2023-07-23
- Go Web开发进阶实战(gin框架) 2023-09-06
- R语言-如何切换科学计数法和更换小数点位数 2022-11-23
- Swift超详细讲解指针 2023-07-08
- 汇编语言程序设计之根据输入改变屏幕颜色的代码 2023-07-06
- R语言绘图数据可视化pie chart饼图 2022-12-10
- Ruby on Rails在Ping ++ 平台实现支付 2023-07-22
- Ruby的字符串与数组求最大值的相关问题讨论 2023-07-22
- R语言关于二项分布知识点总结 2022-11-30