首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Z80寄存器终结

Z80寄存器终结
EN

Stack Overflow用户
提问于 2014-02-07 23:23:56
回答 2查看 4.7K关注 0票数 5

考虑到此示例代码:

代码语言:javascript
复制
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 (十进制)装入寄存器HL
  • 再次打印H、L和HL寄存器的值。

样本输出:

代码语言:javascript
复制
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

现在请回答以下问题:

  1. 关于寄存器如何工作的上述假设(和样本输出)是否正确?
  2. 其他寄存器对(AF、BC、DE)的功能是否完全相同?
  3. 如果1和2的答案是肯定的,那么为什么Z80被认为是小endian呢?当HL寄存器内容被写入内存时,L字节首先被写入,但是(随后依次读取它们时,字节肯定是大端顺序)?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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之前的地址读取。

票数 8
EN

Stack Overflow用户

发布于 2014-02-26 07:14:03

代码语言:javascript
复制
ld hl, $1234
ld ($fc00), hl

此时,如代码所示,H=12美元,L=34美元。$fc00 = $34的字节,$fc01 = $12的字节。

代码语言:javascript
复制
ld hl, $5678
ld ($fc02), hl

($fc00) = $34,($fc01) = $12,($fc02) = $78,($fc03) = $56。因此,从$fc00逐字节读取内存将是$34127856,而不是$12345678,因为Z80是小endian。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21639597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档