java - 使用 Java 表示字节码中的相对寻址

标签 java hex

我正在尝试用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/

相关文章:

css - 使用 HEX 或 RGBA

c - 如何将十六进制值转换为 WORD、DWORD 或 QWORD 并将结果存储在双变量中?

java - 变量打印问题

java - 更改 JTextPane EditorKit

java - 在 Eclipse/RAD 中哪里可以找到翻译后的 JSP servlet 代码?

java - 用十六进制字符串加密和解密

c++ - 十六进制到 float IEEE 754 double c++

java - 使用特定于版本的 stub

java - 如何使用 POJO 处理来自 kafka lister 的事件?

audio - 法律/原始音频数据