LMC汇编程序问题:需自动指向数组首元素而非手动设置指针
LMC汇编程序修正:自动指向数组首元素
问题说明
原代码需手动硬编码数组首元素的内存地址(如index DAT 17),这会因代码位置变化导致指针失效,需改为自动初始化指针到数组开头,同时完善最终总和输出逻辑。
修正后的可运行代码
INP ; 输入初始值存入累加器(R) STA result ; 保存初始R到result OUT ; 输出初始R loop LDA @index ; 间接寻址:加载当前指针指向的数组元素 ADD result ; 将数组元素加到R上 STA result ; 更新R的当前值 OUT ; 输出当前R LDA index ; 获取当前指针地址 ADD one ; 指针+1,指向下一个数组元素 STA index LDA count ; 获取剩余循环次数 SUB one ; 循环次数-1 STA count BRP loop ; 次数≥0则继续循环 LDA result ; 循环结束,输出最终总和 OUT result DAT ; 存储累加器R的数值 count DAT 8 ; 9个元素对应8次递减(共执行9次循环) one DAT 1 array1 DAT 1 ; 替换为学号第1位 array2 DAT 1 ; 替换为学号第2位 array3 DAT 1 array4 DAT 1 array5 DAT 1 array6 DAT 1 array7 DAT 1 array8 DAT 1 array9 DAT 1 ; 替换为学号第9位 index DAT array1 ; 自动初始化指针到数组首元素,由汇编器计算地址
核心修正细节
- 自动指针初始化:将
index的初始值改为array1,汇编器会自动解析array1的实际内存地址并赋值,无需手动计算硬编码,彻底解决指针地址错误问题。 - 完善最终输出:添加循环结束后的
LDA result和OUT指令,完成任务要求的「输出最终总和」步骤。 - 循环逻辑验证:
count初始值设为8,每次循环减1,BRP指令会在count≥0时继续循环,刚好执行9次(对应9个数组元素),遍历逻辑正确。
内容的提问来源于stack exchange,提问作者Nada
相关产品推荐
相关产品推荐

