Little Man Computer列表管理代码正序打印及重置功能问题求助
LMC列表管理程序故障修复
故障原因说明
995清空列表失效
代码reset分支使用了未声明的变量zero,无法正常将COUNT赋值为0,导致重置失败。
997正序输出失效
- 正序打印的入口标签
PRINTF前加了---被注释,无法正确跳转 - 正序遍历逻辑错误,原有计算方式是从列表尾部开始寻址,无法取到头部元素
- 打印逻辑直接修改全局
COUNT变量,打印完成后会把列表长度误改为0,影响后续操作 - 重复定义
LDIT标签,部分LMC汇编器会直接报错无法运行
修复后完整代码
START INP STA TEMP SUB NINES BRZ END LDA TEMP SUB EIGHT BRZ PRIT_REV LDA TEMP SUB SEVEN BRZ PRINT_FORWARD LDA TEMP SUB SIX BRZ DOOUT LDA TEMP SUB FIVE BRZ RESET LDA COUNT SUB TEN BRZ START LDA TEMP SUB HUND BRP START ; 存入列表逻辑 SIT LDA SINST ADD COUNT STA SLOC LDA TEMP SLOC DAT 0 LDA COUNT ADD ONE STA COUNT BRA START ; 倒序输出 PRIT_REV LDA COUNT BRZ END STA TEMP_IDX ; 用临时变量存索引,不修改原COUNT REV_LOOP LDA TEMP_IDX SUB ONE STA TEMP_IDX LDA LINST ADD TEMP_IDX STA LDIT_REV LDIT_REV DAT 0 OUT LDA TEMP_IDX BRZ START BRA REV_LOOP ; 正序输出 PRINT_FORWARD LDA COUNT BRZ END LDA ZERO STA TEMP_IDX FOR_LOOP LDA LINST ADD TEMP_IDX STA LDIT_FOR LDIT_FOR DAT 0 OUT LDA TEMP_IDX ADD ONE STA TEMP_IDX SUB COUNT BRZ START BRA FOR_LOOP ; 输出列表长度 DOUT LDA COUNT OUT BRA START ; 重置列表 RESET LDA ZERO STA COUNT BRA START END HLT TEMP DAT 0 COUNT DAT 0 TEMP_IDX DAT 0 ZERO DAT 0 ONE DAT 1 TEN DAT 10 HUND DAT 100 SINST DAT 380 LINST DAT 580 FIVE DAT 995 SIX DAT 996 SEVEN DAT 997 EIGHT DAT 998 NINES DAT 999
内容的提问来源于stack exchange,提问作者julio11
相关产品推荐
相关产品推荐

