x86 - 为什么 NEG 指令会干扰进位标志?
问题描述
在取反(NEG)期间,除非操作数为零,否则会设置进位标志,在这种情况下它会被清除。
但是,它并不能帮助我推理进位标志。为什么它会以这种方式运行以及 NEG 如何触发一个应该代表结转的标志。
如果源操作数为 0,则 CF 标志设置为 0;否则设置为 1。
在我的脑海中,我看到这一点的方式解释了我正在做一个按位否定,并添加一个。为什么设置进位标志?是否有任何过程可以帮助我在不理解上述规则的情况下理解这一点。
解决方案
减法时的进位标志表示借位。如果你取反x
,你(实际上)x
从 0 中减去,这需要借位,除非x
是 0。
因此,除非您减去 0,否则设置进位标志是有意义的。
3 位 2-s 恭维
cf
[0]000 value = 0
[0]011 SUB 3
---
Requires borrow.
cf
[1]111 0 after carry (cf=1)
011 SUB 3
------
[1]100
+1 2cp
101
您可以在心理上将其视为按位否定。
推荐阅读
- java - java 8中每种Base64的用途和用例
- discord.js - Discord 机器人角色命令因未知原因停止工作
- python - 使用 Selenium 自动化时,还有其他方法可以处理 Chrome 的打印预览窗口吗?
- powershell - 如何使用 powershell 使用 double if 语句?
- javascript - 回调不更新状态
- sql - 以下场景需要 SQL 查询
- javascript - Ptevent Sequelize 将列名括在引号中
- docker - 在本地查找图像的基本图像或“docker hub 中的源”
- flutter - 类型“GeoPoint”不是颤振 Firestore 中“字符串”类型的子类型
- c# - 我怎样才能把这个条件改成我想要的