32位IR如何保持加载指令?(RISC风格32位体系结构) [英] How 32 bit IR hold load instruction?(RISC style 32bit architechture)

查看:0
本文介绍了32位IR如何保持加载指令?(RISC风格32位体系结构)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对指令大小和可寻址空间感到有点困惑(我假设指令大小应该与地址位的大小相同。我没有在我的书中找到足够的解释)如果我是正确的,那么在理论上,如果我们在32位体系结构(RISC风格)中有2^32个可寻址单元(字节)的内存,那么4字节大小的加载指令如何保存操作码和地址?

推荐答案

您假设一条指令可以对来自任意绝对地址的加载进行编码。在x86上也是如此,即使在64位模式下也是如此(但有一个特殊的操作码,用于从没有位移或索引寄存器的64位绝对地址加载,且DEST必须是RAX)。

在大多数RISC体系结构上,从绝对地址加载通常使用两条立即移位指令来设置寄存器的上半部分和下半部分,然后将该寄存器用作加载地址。

例如

int a;
int foo(void) { return a; }

compiles to (ARM gcc 4.8.2 on godbolt)

foo():
    movw    r3, #:lower16:.LANCHOR0 @ tmp113,
    movt    r3, #:upper16:.LANCHOR0 @ tmp113,
    ldr r0, [r3]    @, a
    bx  lr  @
a:
    .space  4

这篇关于32位IR如何保持加载指令?(RISC风格32位体系结构)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆