MOV标签,HL表

时间:2016-01-16 19:23:53

标签: assembly z80

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

有人可以通过执行向我解释那些行。

Click here to see tabele

1 个答案:

答案 0 :(得分:1)

该表看起来像CPU(代码22h)执行它时所执行的操作的定义。因此整个指令有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表示高字节和低字节。因此ZR处的字节加载到L中,ZR + 1处的字节加载到H中(同样,我们正在以小端加载寄存器)。

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

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

例如,如果您从设置为HL的{​​{1}}开始,并且您有说明:

0x0000

并且在地址MOV 0x2345, HL 处有字节0x12
在地址0x2345,你有字节0x56

然后0x2346最终成为:HL

该指令将编码为:0x5612