我正在尝试用Java 表示相对寻址模式。我们知道,对于相对寻址,操作数必须采用 -128 到 +127 之间的值,因为相对寻址使用 2 的补码来表示操作数是否应该与基值相加或相减。
但是我正在努力将其转换为十六进制表示形式。
2 的补码形式使用最高有效位来确定所讨论的位模式是正还是负,因此范围为 -128 到 +127。
假设我们有相对地址操作数 *+3A
,表明用户想要添加 3A
到程序计数器中保存的值。这很简单,如 3A
转换为00111010
二进制。
但是我该如何代表 *-3A
在Java中?如果我将3A转换为十进制,即58
然后对其求反得到-58
然后将其转换回十六进制,这样可以吗?
我不确定这是否真的很简单,我正在把它变成比实际更大的东西。
最佳答案
我们有一些事情正在发生。
二进制补码是所有现代机器中负整数的表示形式。要对整数求反,您可以:
- 取按位补码,然后
- 加一,忽略进位位。
所以这需要在特定字长的上下文中完成。如果允许的范围是 -128 到 127,则您正在处理一个 8 位“字”。
第二个问题是如何对结果进行编码以供人类(或编译器)使用。无论哪种情况,简单地使用带符号的十进制整数可能都是理想的选择。
关于java - 使用 Java 表示字节码中的相对寻址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48916481/