1

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

谢谢!

4

3 回答 3

0
MOV EAX,[EBP+8]
MOV EBX,[EBP+12]

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

于 2015-05-05T22:00:41.120 回答
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 + 置换

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

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

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

所以一个 16 位的操作数可能有

4位操作码

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

谢谢,

于 2015-05-05T22:45:34.203 回答
0

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

这是使用基址寄存器 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。

我希望这个问题可以帮助那些像我这样的寻址模式的新手:)

谢谢你们。

于 2015-05-05T23:27:09.320 回答