0

作为我正在学习的课程的一部分,我正在学习 8080 组装。我指的是英特尔 8080-8085 汇编语言编程手册(1977 年)。

在手册的第 3 章指令集中,我看到以下与 DCX 相关的描述:

DCX 将指定寄存器对的内容减一。DCX 不影响任何条件标志。

相关的例子说:

假设执行 DCX H 指令时,H 和 L 寄存器包含地址 9800H。DCX 将两个寄存器的内容视为单个 16 位值,因此从 H 寄存器中借位以产生值 97FFH。

我使用二进制补码加法自己尝试了数学运算,并且肯定产生了进位。

所以我的问题是:是否只在算术运算的情况下设置进位位?

TIA

光伏

4

2 回答 2

2

抛开特定的 CPU 并仅考虑二进制算术,从 9800H 中减去 1 时不会产生借位。但是,将 0FFFF 添加到 9800H 时会产生进位。在这两种情况下,您都会在结果的 16 个最低有效位中得到 97FFH。

无论 CPU 中的设计选择如何,您都只需遵循文档,例如本文档,MCS®-80/85 FAMILY USER'S MANUAL

它在 5.6.1 数据传输组中说:

条件标志不受该组中任何指令的影响。

5.6.2 算术组:

除非另有说明,否则该组中的所有指令都会根据标准规则影响零、符号、奇​​偶校验、进位和辅助进位标志。

同样在 5.6.3 逻辑组中:

除非另有说明,否则该组中的所有指令都会根据标准规则影响零、符号、奇​​偶校验、辅助进位和进位标志。

5.6.4 分公司:

条件标志不受该组中任何指令的影响。

5.6.5 堆栈、I/O 和机器控制组:

除非另有说明,否则条件标志不受该组中任何指令的影响。

您需要记住常见指令如何影响标志。你可以编写一份简单的备忘单,或者,也许,找一份别人制作的备忘单(一些汇编书籍为了程序员的方便而提供了这些备忘单)。

如果您对为什么某些指令不影响标志或某些指令以特定方式影响它们感兴趣,这取决于。原因可能不同,具体取决于特定指令:更便宜的电路、更容易编程常见问题、与早期设计的兼容性,或者只是简单地继承运行良好的东西而没有给予太多额外的思考。

于 2019-04-18T10:21:32.143 回答
2

DCX H当然是算术指令,但 16 位递增和递减指令不会更改 i8080 上的任何标志,即使 8 位指令(例如DCR Hand DCR L)会更改。您可以在英特尔 8080 微型计算机系统用户手册中找到更多详细信息,请点击此处:

http://www.nj7p.info/Manuals/PDFs/Intel/9800153B.pdf

此外,查看 Z80 仿真器的内部结构可能会有所帮助。以下是与我的实现进行比较的相关片段:

    void on_dec_rp(regp rp) {
        self().on_set_regp(rp, dec16(self().on_get_regp(rp)));
    }

DCX rp

    void on_dec_r(reg r) {
        fast_u8 n = self().on_get_reg(r);
        fast_u8 f = self().on_get_f();
        fast_u8 hf = (n & 0xf) > 0 ? hf_mask : 0;
        n = dec8(n);
        f = (f & (cf_mask | yf_mask | xf_mask | nf_mask)) |
                (n & sf_mask) | zf_ari(n) | hf | pf_log(n);
        self().on_set_reg(r, n);
        self().on_set_f(f);
    }

直流电阻

于 2019-05-12T20:45:12.620 回答