【发布时间】:2019-09-08 14:30:40
【问题描述】:
我正在学习 8080 组装,这是我正在学习的课程的一部分。我指的是 Intel 8080-8085 汇编语言编程手册(1977 年)。
在手册的第 3 章指令集中,我看到以下与 DCX 相关的描述:
DCX 将指定寄存器对的内容减一。 DCX 不影响任何条件标志。
相关的例子说:
假设 H 和 L 寄存器包含地址 9800H,当 执行 DCX H 指令。 DCX 考虑了两者的内容 寄存器为单个 16 位值,因此执行借位 从 H 寄存器产生值 97FFH。
我使用二进制补码加法自己尝试了数学运算,并且肯定生成了进位。
所以我的问题是:进位是否仅在算术运算的情况下设置?
TIA
PV
【问题讨论】:
-
您的示例中有一个错字:
DCX H应该是DCX HL。根据@AlexeyFrunze 的回答 - 您的问题的答案在您引用的文档中。不要混淆算术意义上的“进位生成”和 CPU 中的进位标志,永远不要假设后者总是跟随前者。在某些 CPU 架构中(默认情况下)不会通过算术/逻辑操作设置标志,您必须明确“要求”设置它们(例如 ARM)。 -
@tum_:同样重要的是,在 ARM 上,如果有 no 借位,则会设置减法进位标志。与 x86(可能是 8080)相反,它是减法的借用标志。当然在 x86
inc/dec上不要修改 CF,只修改其他标志。add/sub设置CF。所以是的,你必须根据每条指令检查它们是如何设置标志的。 -
@PeterCordes 是的。我认为,在 google.groups 上,我第一次学到了最有效的 ARM Asm sn-p 的即兴竞赛之一(来自一个显然来自 ARM C 编译器开发团队的人,我敢打赌他也是如此) EOR 等不会影响进位标志。来自 z80 世界,我认为它已被清除,直到我实际检查了 ARM 参考。很好的教训。
-
@tum_ 有趣的事实:在 ARM 的 Thumb 模式下,大多数指令的短 16 位编码用于标志设置版本。 (即助记符上的
s后缀)令人惊讶的是,that includesmovsfor moving an immediate to a register。当您记得movs对源操作数进行移位将根据移位/旋转设置标志时,这对于 reg-reg 移动并不那么疯狂,但对于立即数来说这很奇怪。但是,是的,大多数具有标志 reg 的 RISC 都具有可选的标志设置。
标签: assembly intel-8080