【发布时间】:2013-06-02 07:37:50
【问题描述】:
我正在为 6502 编写一个模拟器,基本上,有一些指令在其中一个寄存器(主要是 X 和 Y)中保存了一个偏移量,我想知道,因为分支指令使用有符号的 8 位整数,寄存器是否将它们的值保持为 8 位有符号?意思是:
switch(opcode) {
//Bunch of opcodes
case 0xD5:
//Read the memory area with final address being address + x offset
int rempResult = a - readMemory(address + x);
//Comparing some things, setting/disabling flags
//Incrementing program counter and cycles/ticks
break;
//More opcodes
}
假设在这种情况下 x = 0xEE。在常规二进制中,这意味着 x = 238。然而,在 6502 中,分支指令使用带符号的偏移量来跳转到内存地址,所以我想知道,在这种情况下,238 是解释为 -18,还是只是常规无符号 8 位值?
【问题讨论】:
-
寄存器保存8位数据。它既没有签名也没有未签名。由每条指令决定它如何解释它。相对跳转将其解释为有符号。
-
这并不是真正的“相对跳跃”。这是一个零页,X“比较累加器”指令。它将累加器与一些值进行比较并相应地设置标志。问题是,对于零页,X(或任何...,X 指令),它们被解释为有符号还是无符号? “他们”是指寄存器。
标签: cpu-registers 6502 signedness