考虑到这一点的示例代码:Z80注册字节序
ZilogZ80A cpu = new ZilogZ80A();
cpu.GeneralRegisters.H.FromUInt(229);
cpu.GeneralRegisters.L.FromUInt(90);
Console.WriteLine("H : " + cpu.GeneralRegisters.H.ToString());
Console.WriteLine("L : " + cpu.GeneralRegisters.L.ToString());
Console.WriteLine("HL: " + cpu.GeneralRegisters.HL.ToString());
Console.WriteLine("Load 23268 (0x5AE4) into register HL...");
cpu.GeneralRegisters.HL.FromUInt(23268);
Console.WriteLine("H : " + cpu.GeneralRegisters.H.ToString());
Console.WriteLine("L : " + cpu.GeneralRegisters.L.ToString());
Console.WriteLine("HL: " + cpu.GeneralRegisters.HL.ToString());
其为执行以下操作:
- 负载229(十进制)到寄存器H
- 负载90(十进制)到寄存器L
- 打印出H,L和HL寄存器的值(十六进制,二进制MSB,十进制)
- 加载23268(十进制)int o寄存器HL
- 再次打印出H,L和HL寄存器的值。
输出示例:
H : 08-bit length register (@45653674): 0x00E5 | MSB 0b11100101 | 229
L : 08-bit length register (@41149443): 0x005A | MSB 0b01011010 | 90
HL: 16-bit length register (@39785641): 0x5AE5 | MSB 0b01011010 11100101 | 23269
Load 23268 (0x5AE4 into register HL...
H : 08-bit length register (@45653674): 0x00E4 | MSB 0b11100100 | 228
L : 08-bit length register (@41149443): 0x005A | MSB 0b01011010 | 90
HL: 16-bit length register (@39785641): 0x5AE4 | MSB 0b01011010 11100100 | 23268
现在的问题:
- 是上述假设(和样品输出)寄存器如何运作是否正确?
- 其他寄存器对(AF,BC,DE)的功能是否完全相同?
- 如果对1.和2.的答案是肯定的,为什么Z80会考虑小端?当HL寄存器的内容写入存储器时,L字节先行,但(当它们按顺序读取时,字节一定是大端顺序的)?
endianess适用于在RAM中的排序。它不适用于加载了即时值的寄存器。如果你正在将'0x5AE5'写入RAM中,那么endianess会确定它是否以5AE5或E55A的形式进入。 –