
'转'test和cmp一个很菜很基础的话题! @ pediy.com
OF(Overflow Flag):溢出标志,表示计算溢出,通常与段错误有关。 SF(Sign Flag):符号标志,结果为负时置1。 ZF(Zero Flag):零标志,结果为0时置1。 CF(Carry Flag):进位标志,进位时置1。 AF(Auxiliary carry Flag):辅助进位标志,记录半字节计算中的进位。 PF(Parity Flag):奇偶标志,结果中1的个数为偶数时置1。 DF(Direction Flag):方向标志,影响串操作的方向。 IF(Interrupt Flag):中断标志。 TF(Trap Flag):陷阱标志。
发布日期:2021-05-27 02:53:19
浏览次数:27
分类:精选文章
本文共 935 字,大约阅读时间需要 3 分钟。
测试与比较指令深入解析
标志寄存器解析
在x86汇编中,PSW(Program Flag)寄存器是程序状态字寄存器,包含条件码标志和控制标志。其16位结构如下:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF
条件码
控制标志
测试指令
指令类型
TEST进行逻辑与运算,用于测试两个数值的关系,不会改变数值但会更新标志位。
- 语法:TEST r/m, r/m
- 影响标志:C、O、P、Z、S(其中C和O会被清零)
常见用例
测试单个位:
TEST eax, 100
100b表示二进制数,用于检查eax的第三位是否为1。
测试寄存器是否为空:
TEST ecx, ecx
ZF置1表示ecx为空。
比较指令
指令类型
CMP执行算术减法运算,用于比较两个数的大小,仅更新标志位,不改变数值。
- 语法:CMP r/m, r/m
- 影响标志:C、P、A、Z、O
比较示例
CMP eax, 2
- 如果eax等于2,ZF置1,若需执行跳转,可结合JZ使用。
注意事项
- ZF的作用:在两种指令中,ZF均用于标记结果是否为零。测试结果为0时置张,比较结果为0时也置张。
- GF与GF的主要区别:TEST执行逻辑与,仅更新标志;而CMP执行减法运算,只有差异部分会影响标志。
总结
掌握这些关键指令,能够更高效地编写汇编程序。理解XF的作用充分能够提升代码的准确性和可读性。在实际编程中,合理运用TEST和 CMP 做好数据判断,能极大提升代码执行效率。
发表评论
最新留言
不错!
[***.144.177.141]2025年05月10日 18时25分17秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP系列:使用PHP实现登录注册功能的完整指南
2025-03-28
Python&aconda系列:conda踩坑记录2.UnsatisfiableError: The following specifications were found to be incompa
2025-03-28
Python&aconda系列:(W&L)Conda使用faiss-gpu报错及解决办法、安装numpy的坑、cmd执行Python脚本找不到第三方库、安装tensorflow-gpu时遇到的from
2025-03-28
"WARNING: Increasing RAM size to 1GB" and "Cannot set up guest memory 'xxx.ram': Invalid argument".
2025-03-28
#if 0 #elif 1 #else #endif 用法
2025-03-28
#include <gdiplus.h>出错
2025-03-28
$ajax({}).done 和 $ajax({}) success 区别
2025-03-28
(反射+内省机制的运用)处理jdbc的结果集
2025-03-28
(反射+内省机制的运用)简单模拟spring IoC容器的操作
2025-03-28
(转)SQLServer全局变量
2025-03-28
(转)tomcat7.0 manager app和host manager web管理
2025-03-28
(转)使用公用表表达式的递归查询(SQLSERVER2005)
2025-03-28
(转)在CListView列表视图中添加右键菜单的方法
2025-03-28
.Net(C#)实现异步编程
2025-03-28
.Net中webBrowser控件JS交互
2025-03-28