【发布时间】:2016-07-14 10:36:50
【问题描述】:
谁能解释一下操作码0x08 在 LR35902 处理器上的作用。助记符是LD (a16),SP。
我很困惑,因为堆栈指针是一个 16 位值,但 (a16) 是一个只能存储 8 位的地址(我认为!)。我可以猜到前 8 位被放置到 (a16) 中,下一个被放置在它们旁边,但我想确认一下。
【问题讨论】:
谁能解释一下操作码0x08 在 LR35902 处理器上的作用。助记符是LD (a16),SP。
我很困惑,因为堆栈指针是一个 16 位值,但 (a16) 是一个只能存储 8 位的地址(我认为!)。我可以猜到前 8 位被放置到 (a16) 中,下一个被放置在它们旁边,但我想确认一下。
【问题讨论】:
是的,该操作码将 SP 值放在地址 (a16) 中。下面是它的样子:
void MemoryWrite(uint16_t addr, uint8_t value);
MemoryWrite(a16, SP & 0xFF);
MemoryWrite(a16 + 1, (SP & 0xFF00) >> 8);
因为它是一个 little-endian 处理器,所以您将最低有效字节放在首位。
【讨论】:
LD (0xFFFF), SP 时,内存位置0xFFFF 将具有SP 最低有效位。内存指针回绕,CPU 将尝试写入内存位置0x0000。什么都不会发生,因为 0x0000 是只读的。