我只需要解释基本+偏移量寻址模式的工作原理。无法找到明确的答案。 (我一直在使用LC-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。
我希望这个问题有助于那些新的解决模式,比如我:)
谢谢大家。