基准+偏移寻址模式

时间:2015-05-05 21:50:57

标签: addressing-mode

我只需要解释基本+偏移量寻址模式的工作原理。无法找到明确的答案。 (我一直在使用LC-3,不确定是否重要)。一个简单的例子也会有所帮助。

谢谢!

3 个答案:

答案 0 :(得分:0)

MOV EAX,[EBP+8]
MOV EBX,[EBP+12]
例如,EBP是这里的基础(保持基地址),如“00402000” 所以EAX将加载地址中的值[00402000 + 8] I.e 00402004

答案 1 :(得分:0)

基本+索引寻址模式

2寄存器指定指令中操作数的地址。 添加存储在这些寄存器中的数值,以获得操作数的完整地址。

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

MOV C, [A,B] => C = contents of location A+B 

Base + Indexing寻址的味道称为base + Index + displacement

Displacement =添加到Base + Index的指令中的立即值。 这就是你在操作码中看到的内容。

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

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

所以16位操作数可能有

操作码为4位

基址寄存器为3位 索引寄存器为3位 6位立即移位。

谢谢,

答案 2 :(得分:0)

我相信我已经找到了答案。我会在这里发布,以防其他人遇到麻烦。我发现答案隐藏在我的老师提供XD的100幻灯片powerpoint深处

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

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

让我们说R6 = x3000,IR [5:0] = x5,R2 = 0(虽然这个值并不重要,因为它最后会加载另一个值)

MAR<-R6 + IR[5:0]

R6被添加到IR [5:0](这是LDR指令的最后六位中的偏移值)。基数x3000(R6的值)加上x5(IR [5:0]的值),给出x3005。 MAR(存储器地址寄存器)现在保持x3005。

MDR<-MEM[MAR]

MAR(x3005)中的值被加载到MDR(存储器数据寄存器)中。

R2<-MDR

MDR(x3005)中的值被加载到R2中。 R2现在保持值:x3005。

我希望这个问题有助于那些新的解决模式,比如我:)

谢谢大家。