gpt4 book ai didi

cpu-architecture - 短寻址模式和长寻址模式有什么区别

转载 作者:行者123 更新时间:2023-12-04 08:33:16 25 4
gpt4 key购买 nike

在浏览处理器架构的一些数据表时,我看到了术语,短寻址方式和长寻址方式

任何人都可以给我这些术语的一般概念(不需要特定于处理器!)

/renjith_g

最佳答案

  • 短寻址模式使用相对地址,计算为(一些注册 + 一些小常量),通常允许小/少/快指令,但只能寻址小范围的内存;
  • 长寻址模式使用绝对地址,这通常需要大/多/慢指令,但可以访问任何内存。

我将以 ARM 代码为例,但这可能(在一般意义上)适用于许多其他处理器。

每条 ARM 指令(忽略 Thumb)都是 32 位长,为了这个例子,我们假设 ARM 可以访问 32 位地址空间。

每条指令都必须解码,基本上是通过将这 32 位分解成不同的字段 - 其中一些位必须用于存储指令的类型。

希望因此,您不能在一条指令中将任意地址加载到寄存器中这一点很清楚:

MOV Rn, #AABBCCDD

行不通 - 因为我们需要使用位来指定指令 (MOV) 和目标寄存器 (Rn),所以我们没有剩余的 32 位来存储 32 位地址。

因此,如果我们想要寄存器中某物的地址,我们有几种选择:

<强>1。使用 PC 相关

有一个伪操作如下:

ADR Rn, .label
...
.label

扩展为:

ADD Rn, PC, (.label - here)

如果 .label 在当前指令的大约 4k 以内,我们可以从当前 PC(程序计数器)中加/减以获取该地址。那是一个相对地址。

<强>2。使用多条指令

您可以使用 adds 或 ors 建立任意地址:

MOV Rn, #AA000000
ADD Rn, Rn, #00BB0000
ADD Rn, Rn, #0000CC00
ADD Rn, Rn, #000000DD

(实际上你可以更有效地做到这一点,但你明白了)。

<强>3。将绝对地址存储在已知的相对位置

如果你知道你想要的地址存储在附近,你可以从内存中加载它:

ADR Rn, .store
LDR Rn, [Rn]

.store
EQU #AABBCCDD

现在,其他处理器架构可能具有可变长度指令(例如 x86),因此您可以选择是使用较短的相对寻址模式(例如相对于 PC 或另一个寄存器),还是更长(可能)更慢的指令它包含一个完整的 32 位地址。

关于cpu-architecture - 短寻址模式和长寻址模式有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229614/

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