如何在Little Man Computer(LMC)中实现间接寻址访问数据?
在Little Man Computer(LMC)中实现间接寻址
你之前用两次LDA的思路走不通,问题出在第二次LDA get——get是代码标签,这条指令加载的是该标签位置的指令内容(也就是第一条LDA temp),根本不是你要的目标地址指向的数据。
下面分两种场景给你正确的实现方式:
场景1:模拟器支持
LDI(间接加载)扩展指令
这是最简便的方式,直接用LDI temp就能完成间接寻址。这条指令的逻辑是:先读取temp存储的地址值,再加载该地址对应的数据到累加器。场景2:只能使用标准LMC基础指令集
得通过临时存储单元中转,步骤如下:- 用
LDA temp把temp里存的目标地址加载到累加器 - 用
STA addr_temp把这个地址值存到临时单元addr_temp - 用
LDA (addr_temp)(部分模拟器语法是LDA *addr_temp)间接加载数据——括号/星号表示取该单元存储的地址对应的数据
- 用
给你一个完整的标准指令实现示例:
LDA temp ; 加载temp中存储的目标地址 STA addr ; 将地址暂存到addr单元 LDA (addr) ; 间接加载addr指向地址的数据 OUT ; 输出结果 HLT ; 停机 temp DAT 50 ; temp中存储的目标地址是50 addr DAT 0 ; 临时存储地址的单元 50 DAT 100 ; 目标地址50中存放的数据是100
如果用LDI指令,代码可以简化成:
LDI temp ; 直接间接加载temp指向地址的数据 OUT HLT temp DAT 50 50 DAT 100
内容的提问来源于stack exchange,提问作者bestgamer14
相关产品推荐
相关产品推荐

