gpt4 book ai didi

assembly - MIPS 标签存储位置

转载 作者:行者123 更新时间:2023-12-05 03:09:30 26 4
gpt4 key购买 nike

在 MIPS 中,在使用跳转指令的同时,我们使用了标签。

again: nop
$j again

所以当我们到达跳转指令时,我们再次使用标签来表示去哪里以及那里使用的实际地址的值。我想知道标签again 的存储位置。意思是说,nop 存储在 0x00400000,跳转指令在 0x00400004。那么again保存在哪里,MIPS怎么知道again指向0x00400000呢?它是否存储在内存映射的动态数据区域? This is the memory map I've been provided for MIPS

我还在下面列出了引起这种混淆的问题,以供引用。

给出以下分支(be,bne)和跳转(j)指令的十六进制目标代码。

... # some other instructions
again: add ... # there is an instruction here and meaning is insignificant
add ... # likewise for the other similar cases
beq $t0, $t1, next
bne $t0, $t1, again
add ...
add ...
add ...
next: j again

假设标签再次位于内存位置 0x10 01 00 20。如果您认为没有足够的信息来生成代码,请解释。

最佳答案

每个标签对应于内存中的唯一地址。因此,在您的示例中,并且与您所说的一致,如果 nop 指令存在于 0x00400000 处,则 again 将对应(不是重点 - 稍后会详细介绍)到同一个地址。

标签可以同时存在于文本和数据段中。但是,在您的示例中,标签显示在 .text: 段中。因此,它代表指令的地址而不是变量。

这是重要的区别:

标签是大多数 ISA 的一部分,目的是使人类更容易编写汇编。但是,请务必记住,汇编不是代码的最终形式。换句话说,在二进制表示中,您的标签将不再是一个标签。

所以,这就是将要发生的事情:

汇编器将识别与每个标签指令关联的内存地址。让我们保留 0x00400000 的运行示例。然后,在每个跳转指令中,它将获取该地址并用它来替换操作码中的标签。 ,没有更多的标签,绝对没有指针(这意味着我们将在内存中有另一个存储内存地址的地方)。

当然,内存地址本身对应于示例中文本段中的一个点,因为它与一条指令匹配。

简单地说,标签的存在是为了让我们的生活更轻松。然而,一旦它们被组装起来,它们就会被转换为它们标记的指令/变量的实际内存地址。

关于assembly - MIPS 标签存储位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42611424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com