Chr*_*heD 6 z80 endianness cpu-registers
考虑此示例代码:
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());
Run Code Online (Sandbox Code Playgroud)
这是做什么的:
样本输出:
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
Run Code Online (Sandbox Code Playgroud)
现在提问:
是 - HL由H作为最重要的字节,L作为最小.如果你执行一个16位的操作,ADD HL,BC那么从最高位L+C进位将流入计算H+B.在这方面,所有寄存器对都是相似的.
这是因为写入的逻辑顺序与endianess无关.例如,在C语言中,您不必0x0001在某些平台0x0100上编写与其他平台相同的内容.写作时,首先要写出最重要的内容.
z80是小端,因为如果你要存储HL到内存,L之前会写一个字节H.如果您要阅读,L将会从之前的地址中读取H.