MARIE汇编语言循环问题:如何将1-20存入独立内存地址
MARIE循环存值到独立内存地址的解决方案
你的代码目前仅实现了1到20的循环计数,但缺少将每个数值存入独立内存单元的核心逻辑。要实现需求,需要借助指针变量结合MARIE的间接寻址指令(StoreI)来依次写入连续的内存地址,具体修改如下:
修改后的完整代码
Load One // 初始化循环变量X为1 Store X Load StartAddr // 初始化指针,指向第一个存储地址 Store Ptr Loop, Load X Subt Twenty SkipCond 000 // 如果X-20≥0(即X=20),跳转到结束 Jump Endloop Load X StoreI Ptr // 间接存储:将X的值存入Ptr指向的内存地址 Load Ptr Add One // 指针+1,指向下一个内存单元 Store Ptr Load X Add One Store X Jump Loop Endloop, Halt // 数据段 X, Dec 0 One, Dec 1 Twenty, Dec 20 StartAddr, Dec 100 // 从内存地址100开始存储数值1-20 Ptr, Dec 0
关键逻辑说明
- 指针初始化:用
StartAddr定义存储起始地址,Ptr作为动态指针,初始指向这个起始位置。 - 间接存储:
StoreI Ptr指令会把当前X的值写入Ptr寄存器中保存的内存地址,实现动态写入不同单元。 - 指针移动:每次存储完成后,将
Ptr加1,确保下一次写入下一个相邻的内存地址。 - 循环终止条件:当X等于20时,
X-Twenty=0,SkipCond 000触发跳转,结束循环(此时20也会被存入内存,符合从1到20的需求)。
原代码的核心问题
原代码仅更新了循环变量X,没有任何存储到独立内存的操作;间接寻址需要搭配StoreI/LoadI指令使用,同时需要指针来管理目标地址,这部分是你之前缺失的。
内容的提问来源于stack exchange,提问作者Sergio Burciaga
相关产品推荐
相关产品推荐

