‘DAD rp’ 指令执行


在 8085 指令集中,对于 16 位加法,有一个可用的指令,即 **DAD rp** 指令。它是一个 1 字节指令。使用此指令,将 HL 寄存器对的内容与所述寄存器对的内容相加,并将产生的结果存储在 HL 寄存器对中。

助记符,操作数
操作码(十六进制)
字节数
DAD B
09
1
DAD D
19
1
DAD H
29
1
DAD SP
39
1


例如,让我们考虑 DADB 指令的执行。假设 HL 寄存器对的初始内容为 5050H,BC 寄存器对的内容为 4050H。因此,如果我们执行指令 DAD B,则将进行以下 16 位加法:


之前
之后
(BC)
4050H
4050H
(HL)
5050H
90A0H
计算步骤
(BC)= 4050H = 0100 0101
(HL)= 5050H = 0101 0101
       -----  ---------
(HL)  90A0H = 1001 1010


在第一个机器周期 M1 中,DAD B 指令的操作码 09H 从内存中取出到 8085 的 IR 寄存器。然后,8085 将解码此指令,将其解释为 DAD B 指令的操作码。此操作码提取机器周期总共需要 3 + 1 = 4 个时钟周期。现在是将 HL 和 BC 寄存器对的内容相加并将结果存储到 HL 寄存器对的时候了。在 8085 中,我们只有一个 8 位 ALU。因此,要执行此 16 位加法,我们使用临时寄存器来保存中间结果。

在第二个机器周期 M2 中,将发生以下操作。

  • 累加器临时存储在 W 寄存器中;

  • L 寄存器内容移到累加器;

  • C 寄存器内容移到临时寄存器;

  • 执行加法,并将 ALU 输出移到 L 寄存器。

此机器周期使用三个时钟周期。这是一个总线空闲 (BI) 机器周期,因为

  • 8085 没有发出地址;

  • 没有数据从外部发送或接收;

  • 8085 没有产生外部控制信号。

在第三个机器周期 M3 中,将发生以下操作。

  • H 寄存器内容移到累加器;

  • B 寄存器内容移到临时寄存器;

  • 执行带进位的加法,并将结果存储在 H 中;

  • 累加器从 W 寄存器获取原始值。

此机器周期使用三个时钟周期。这也是一个总线空闲 (BI) 机器周期,因为

  • 8085 没有发出地址;

  • 没有数据从外部发送或接收;

  • 8085 没有产生外部控制信号。

因此,DAD B 指令需要总共十个时钟周期。它由操作码提取机器周期(四个时钟周期)组成,后面跟着两个 BI 机器周期(每个三个时钟周期)。


地址
十六进制代码
助记符
注释
2000
D3
OUT F0H
累加器内容将被发送到端口地址 F0H
2001
F0

F0H 作为端口地址


针对此指令 **OUT F0H** 执行的时序图如下:

**总结** − 因此,此指令 **OUT** 需要 1 个字节,3 个机器周期(操作码提取、总线空闲周期、总线空闲周期)和 10 个 T 状态才能执行,如时序图所示。

更新于:2020 年 6 月 27 日

2K+ 次查看

启动您的 职业生涯

完成课程获得认证

开始
广告