如何为Marie Simulator整数除法程序添加非正输入错误处理?
Marie Simulator 正整数除法实现(含错误处理)
需求:编写Marie Simulator程序,实现正整数X与Y的整数除法,通过减法算法计算商和余数并输出;若X或Y≤0,输出999作为错误提示。现有基础代码,但不知道如何集成错误判断与输出逻辑,需要完善。
修正后的完整代码
ORG 100 ; 输入被除数X并存储到A Input Store A ; 输入除数Y并存储到B Input Store B ; -------------------------- ; 错误检查:X≤0 或 Y≤0则输出999 ; -------------------------- ; 判断X(A)是否>0,若不是则跳转到错误分支 Load A Skipcond 800 Jump Error ; 判断Y(B)是否>0,若不是则跳转到错误分支 Load B Skipcond 800 Jump Error ; -------------------------- ; 减法除法计算:商存在C,余数最终保留在A中 ; -------------------------- Loop, Load A Subt B ; 若A-B≥0,跳过跳转指令,继续累加商 Skipcond 800 Jump EndLoop Store A ; 更新被除数为A-B的结果 Load C Add One Store C ; 商值加1 Jump Loop EndLoop, Load C Output ; 输出商 Load A Output ; 输出余数 Jump HaltProg ; 跳转到程序结束 ; 错误处理分支:输出错误码999 Error, Load ErrCode Output HaltProg, Halt ; 数据存储区 C, DEC 0 ; 存储商的初始值 A, DEC 0 ; 存储被除数X,最终存储余数 B, DEC 0 ; 存储除数Y One, DEC 1 ; 用于商累加的常量1 ErrCode, DEC 999 ; 错误提示码
代码关键说明
- 错误检查逻辑:
- 利用Marie的
Skipcond 800指令判断寄存器值是否大于0(指令规则:800对应>0、400对应=0、000对应<0),只要X或Y不满足正整数条件,直接跳转到错误分支输出999。
- 利用Marie的
- 减法除法逻辑:
- 通过循环执行
A = A - B,每成功完成一次减法(结果≥0)就将商C加1,直到A小于B时退出循环,此时C为商,剩余的A就是余数。
- 通过循环执行
- 输出逻辑:
- 正常计算完成后先输出商,再输出余数;错误触发时直接输出999,避免后续计算执行。
- 语法修正:原代码中的
If/Then/EndIf伪语法不符合Marie指令规范,改用Jump+Skipcond实现分支;同时修正了Halt与Output的顺序错误,保证指令执行流程正确。
内容的提问来源于stack exchange,提问作者Legenda Seenoevil
相关产品推荐
相关产品推荐

