HLA程序修改需求:实现任意两输入值相同时返回true
修改后的HLA程序(任意两输入值相同则返回true)
核心修改说明
原程序仅在三个值完全相同时返回true,现在调整hasDuplicates过程的比较逻辑,只要x与y相等、x与z相等或y与z相等任意一个条件满足,就返回1;否则返回0。
修改后的完整代码
program Same; #include("stdlib.hhf"); procedure hasDuplicates(x: int16; y: int16; z: int16); @nodisplay; @noframe; begin hasDuplicates; pop(EDX); // 保存返回地址到EDX pop(z); pop(y); pop(x); push(EDX); // 把返回地址重新压栈 // 检查x和y是否相等 mov(x, BX); cmp(y, BX); je ReturnOne; // 相等则跳转到返回1的逻辑 // 检查x和z是否相等 mov(x, BX); cmp(z, BX); je ReturnOne; // 相等则跳转到返回1的逻辑 // 检查y和z是否相等 mov(y, BX); cmp(z, BX); je ReturnOne; // 相等则跳转到返回1的逻辑 // 所有数值对都不相等,返回0 mov(0, AL); jmp ExitSequence; ReturnOne: mov(1, AL); ExitSequence: ret(); end hasDuplicates; begin Same; stdout.put("输入X: "); stdin.geti16(); push(AX); stdout.put("输入Y: "); stdin.geti16(); push(AX); stdout.put("输入Z: "); stdin.geti16(); push(AX); call hasDuplicates; cmp(AL, 1); jne NumbersAreDifferent; stdout.put("存在重复值. AL = 1"); jmp EndProgram; NumbersAreDifferent: stdout.put("无重复值. AL = 0"); EndProgram: end Same;
关键逻辑调整点
- 比较逻辑重构:依次检查三对数值的相等性,只要任意一对匹配就立即返回1,避免冗余比较
- 分支结构优化:新增
ReturnOne标签统一处理返回true的分支,逻辑更直观 - 交互提示优化:将原输出提示改为更贴合需求的中文表述,语义更清晰
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

