首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MIPS PC和标签跟踪

问MIPS PC和标签跟踪
EN

Stack Overflow用户
提问于 2017-09-23 00:42:58
回答 1查看 515关注 0票数 1

假设当前PC为0x00400010 (增量后),并且目标标签的值为0x00400040。指令中常量的二进制值是多少?

代码语言:javascript
复制
beq $s0, $s0, target

我不太清楚该如何处理这个问题。我希望你能给我一个提示,或者解释一下如何解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-23 08:29:53

我不确定我是否理解你的问题。我假设您要求的偏移量将被编码到指令中。

由于目标位于0x00400040,当前PC位于0x00400010,偏移量可能为0x00000030 (因为0x00400040 - 0x00400010 = 0x00000030)。这可以很容易地转换为您所要求的二进制格式:

代码语言:javascript
复制
0000 0000 0000 0000 0000 0000 0011 0000

但请注意我不知道MIPS。在某些处理器体系结构中,编码到指令中的偏移量是

代码语言:javascript
复制
(target PC) - ((current PC) + (size of current instruction))

因为我不知道MIPS,所以我不知道beq指令的字节大小。因此,我无法计算这种情况下的偏移量。如果您告诉我beq指令的大小,我将对这个答案进行编辑并添加它。

此外,在大多数处理器体系结构中,大多数指令都会限制相对偏移量。再次,我不知道MIPS,但很可能偏移是限制在16,12甚至8位。在这种情况下,要获得实际的二进制偏移量表示,从上面给出的二进制数中删除左边的零,直到只留下用来存储偏移量的位。

编辑(考虑到繁忙的海狸的评论)

在MIPS上,指令似乎与32位/4字节对齐。这允许存储所需的实际偏移量除以4( CPU然后读取偏移量并乘以4来计算实际目标)。优点是,您可以存储更大的偏移与所提供的位。换句话说,这样可以节省2个偏移位。

在您的示例中,PC应该跳过0x00000030字节才能到达目标。然后,存储在指令中的偏移量将是0x00000030 / 4,与0x00000030 >> 2相同,后者是0x0000000C0。您要求使用二进制表示:

代码语言:javascript
复制
0000 0000 0000 0000 0000 0000 0000 1100

在解码/执行指令时,CPU会自动将偏移量乘以4,这样就可以得到所需的实际偏移量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46374911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档