1

我有指示MOV label, HL。我只了解第一行,但第二行我不明白,如果它只是指令MOV label, HL,为什么我们总是需要获取标签的低值和高值的地址?什么是 ZR?

有人可以用execute向我解释那些行吗?

点击这里查看表格

4

1 回答 1

1

该表看起来像是指令(代码 22h)在 CPU 执行时所做的定义。因此,整个指令有 5 个步骤来执行整个过程。对你来说,作为一名程序员,它看起来仍然只是一条指令。

Z80 是一种旧的 8 位技术,当时我们无法一次读取 64 位(或者使用今天的缓存甚至更多)。因此,每次对内存的读取或写入都是一个步骤,一次一个字节。

该表解释了每个步骤中发生的情况。如果您尝试使用该 CPU 构建计算机,这一点尤其重要。但是,如果您正在对芯片进行编程,则它的重要性要小得多,除非您执行的操作包括需要与周期正确的时序。

因此,MOV label, HL它将从地址标签处的内存移动 16 位到寄存器HL

(1) 首先,处理器在 PC 上读取一个字节,发现指令是 22h。啊! 那是一个MOV label, HL

(2,3) 进程现在知道它必须从 PC 中再读取两个字节,代表一个内存地址。Z80 是小端序,它首先读取低字节(来自 PC + 1),然后读取高字节(来自 PC + 2)。

(4,5) 使用步骤 (2,3) 加载的地址现在位于临时寄存器(称为 的内部 CPU 缓冲区ZR)中,用于从内存中读取两个字节。这两个字节保存在HL寄存器中。HL表示高字节和低字节。所以字节 atZR被加载,L字节 atZR + 1被加载H(同样,我们以小端序加载寄存器)。

注意: PC 最终会增加 3,并且每次读取一个字节时可能会增加 1。

因此,它立即从由(64Kb 可寻址内存中的硬编码地址)HL指定的内存缓冲区加载双寄存器的内容。label

例如,如果您从HLset to开始0x0000并且您有以下说明:

MOV 0x2345, HL

在地址处0x2345有字节 0x12
,在地址处0x2346有字节 0x56

然后HL最终成为:0x5612.

指令将被编码为:0x22 0x45 0x23

于 2016-01-18T06:06:53.110 回答