就在我虽然对 Java 如何将所有整数/字节等视为有符号数字有一定的了解时,它又用另一个曲线球击中了我,让我思考我是否真的了解这种处理方式。
这是一段汇编代码,如果满足条件(确实满足),它应该跳转到一个地址。PC 就在跳转之前C838h,然后在条件检查之后,它应该是:C838h + FCh(h = hex),我认为它会被视为有符号,因此 PC 会向后跳转:FCh = -4 in two's compliment negative number。但令我惊讶的是,java ADDED FCh 到 PC 使其错误地跳转到C934h而不是返回到C834h.
C832: LD B,04 06 0004 (PC=C834)
C834: LD (HL), A 77 9800 (PC=C835)
C835: INC L:00 2C 0001 (PC=C836)
C836: JR NZ, n 20 00FC (PC=C934)
Run Code Online (Sandbox Code Playgroud)
我在 Java 代码中对此进行了测试,结果确实相同:
int a = 0xC838;
int b = 0xFC;
int result = a + b; …Run Code Online (Sandbox Code Playgroud)