考虑到此示例代码:
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());它正在做以下工作:
样本输出:
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现在请回答以下问题:
发布于 2014-02-08 02:55:13
是的- HL是由H作为最重要的字节,L是最小的。如果您执行像ADD HL,BC这样的16位操作,那么L+C顶部的进位将流到H+B的计算中。在这方面,所有的寄存器对都是相同的。
这是因为逻辑顺序的东西被写成与恩典无关。例如,在C语言中,您不必在某些平台上编写0x0001来在其他平台上与0x0100相同。在写作时,你首先要写最有意义的东西。
z80是小endian,因为如果要将HL存储到内存中,则L将在H之前写入一个字节。如果要阅读,L将从H之前的地址读取。
发布于 2014-02-26 07:14:03
ld hl, $1234
ld ($fc00), hl此时,如代码所示,H=12美元,L=34美元。$fc00 = $34的字节,$fc01 = $12的字节。
ld hl, $5678
ld ($fc02), hl($fc00) = $34,($fc01) = $12,($fc02) = $78,($fc03) = $56。因此,从$fc00逐字节读取内存将是$34127856,而不是$12345678,因为Z80是小endian。
https://stackoverflow.com/questions/21639597
复制相似问题