我有指示MOV label, HL
。我只了解第一行,但第二行我不明白,如果它只是指令MOV label, HL
,为什么我们总是需要获取标签的低值和高值的地址?什么是 ZR?
有人可以用execute向我解释那些行吗?
该表看起来像是指令(代码 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
例如,如果您从HL
set to开始0x0000
并且您有以下说明:
MOV 0x2345, HL
在地址处0x2345
有字节 0x12
,在地址处0x2346
有字节 0x56
然后HL
最终成为:0x5612
.
指令将被编码为:0x22 0x45 0x23