【问题标题】:MIPS .data Segment to Machine CodeMIPS .data 段到机器码
【发布时间】:2015-05-03 04:02:38
【问题描述】:

我必须将 .data 段中的以下代码转换为机器代码,但我不确定这是如何完成的。

value: .word  -39

我了解 .asciiz 变量的过程,但我找不到任何关于 .word 变量到机器码的信息。

另外,处理器是先组装 .data 段还是 .text 段?我会认为 .data 是因为它第一次出现在书面代码中,但我只是想确定一下。 (我必须按顺序将十六进制地址与它们各自的机器码相关联,我假设这将是第一个机器码。)

【问题讨论】:

  • .data-segment 未转换为机器码。
  • 您可能会问如何用二进制表示有符号整数。在这种情况下,请查看2's complement
  • 好吧,我正在做的任务是专门说“同时执行 .data 和 .text 部分”。如果确实没有翻译 .data 段,我应该忽略这部分的说明吗? (它给出了一个特定的地址,机器代码显然也应该是。)

标签: assembly mips machine-code


【解决方案1】:

.word 告诉汇编器

  • 以下表达式列表的大小(通常.word是两个字节,即16位)
  • 字节顺序(高位或低位地址中的最高有效字节)

两者都取决于您要组装的目标机器

对于负数 - 正如建议的那样 - 通常使用 2 的补码,因此字节 -39 将转换为 0xD90b11011001

正如您已声明此常量 .word,-39 存储为 16 位值,即 0xFFD9

value: .word -39

因此也可以声明为“更多机器编码”

value: .byte 0xD9, 0xFF ; little endian architecture - LSB(yte) at lower address

value: .byte 0xFF, 0xD9 ; big endian architecture - LSB(yte) at higher address

.byte 总是从低地址到高地址填满内存。

【讨论】:

  • 我以为 .word 是 4 位而半字是 2 字节?编辑:等等我错了。你说的是字节而不是比特。
  • 正如我所写...取决于您的机器...对于 MIPS 架构,您是正确的,.word 是 4 字节,因此从低地址到高地址的字节流是 D9 FF FF FF (小端)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
相关资源
最近更新 更多