Addressing mode 基础+;偏移寻址方式

Addressing mode 基础+;偏移寻址方式,addressing-mode,Addressing Mode,我只需要解释一下基+偏移寻址模式是如何工作的。很难找到一个明确的答案。(我一直在与LC-3合作,不确定这是否重要)。一个简单的例子也会有帮助 谢谢大家! MOV EAX,[EBP+8] MOV EBX,[EBP+12] EBP是这里的基址(保存基址),例如“00402000” 因此,EAX将加载地址[00402000+8]中的值,即00402004Base+Index寻址模式 2个寄存器指定指令中操作数的地址。 将存储在这些寄存器中的数值相加,以获得操作数的完整地址 Ex. A = 1000

我只需要解释一下基+偏移寻址模式是如何工作的。很难找到一个明确的答案。(我一直在与LC-3合作,不确定这是否重要)。一个简单的例子也会有帮助

谢谢大家!

MOV EAX,[EBP+8]
MOV EBX,[EBP+12]
EBP是这里的基址(保存基址),例如“00402000” 因此,EAX将加载地址[00402000+8]中的值,即00402004

Base+Index寻址模式 2个寄存器指定指令中操作数的地址。 将存储在这些寄存器中的数值相加,以获得操作数的完整地址

Ex.
A = 1000
Register A = 1000
Register B = 8

MOV C, [A,B] => C = contents of location A+B 
Base+索引寻址有一种风格,称为Base+索引+置换

位移=添加到基+索引的指令中的立即值。 这就是您在操作码中看到的

指令=操作码+操作数1寄存器规范+操作数2的基址寄存器规范+操作数2的索引寄存器规范+立即数值

想象一个有8位寄存器空间的微处理器

因此,16位操作数可能具有

4位操作码

基址寄存器为3位 3位用于索引寄存器 6位用于即时位移


谢谢,

我想我已经找到了答案。我会把它贴在这里,以防它对其他有问题的人有所帮助。我在老师提供的100张幻灯片中找到了答案

这是使用基址寄存器R6和目标寄存器R2执行LDR时发生的情况:

MAR<-R6 + IR[5:0]
MDR<-MEM[MAR]
R2<-MDR

这不是我想要的。在LC-3中,使用的基址是寄存器。LC-3操作码的指令如下所示:0110 010 110 001101前四位是操作码(本例中为LDR);接下来的三个是目标寄存器;接下来的三个是基址寄存器;最后6是偏移量(在2的补码中)。如果我是正确的(如果我错了,请任何人纠正我),它会获取基址寄存器的值,这是一个地址,将偏移量添加到其中,并将值存储在目标寄存器中,尽管我似乎无法得到正确的答案。我认为这不正确。根据我在课堂上学到的知识,我知道你没有将两个寄存器相加。目标寄存器仅用于存储计算值,而不是用作操作数。我相信我已经找到了下面列出的答案。感谢那些试图回答这个问题但答案不正确的人(至少在LC-3体系结构方面,我不确定,可能base+offset在其他地方的工作方式不同)。任何非常熟悉LC-3并对基+偏移寻址工作方式有信心的人,请查看我下面的答案,看看是否正确。非常感谢。“MAR(x3005)中的值加载到MDR(内存数据寄存器)。”--这似乎是错误的,
MEM[MAR]
语法可能意味着从MAR中给定的内存地址加载值。它并不意味着将MAR值本身加载到MDR中。
MAR<-R6 + IR[5:0]
MDR<-MEM[MAR]
R2<-MDR