汇编购票系统函数调用异常:输入4执行view_comp而非reset
汇编购票系统输入4执行view_comp的问题修复
问题根源
你的代码核心错误出在菜单选择的判断逻辑部分:
cmp al, '1' je view_activites cmp al, '2' je view_workshop cmp al, '3' call view_comp cmp al, '4' call reset
- 对选项3的判断没有使用条件跳转指令(
je),而是直接执行call view_comp——不管用户输入的是不是'3',程序都会进入view_comp函数。 - 当输入'4'时,程序走完前两个cmp判断(均不满足跳转)后,会直接执行
call view_comp,而view_comp末尾的jmp DisplayMenu会让程序直接跳回菜单循环,完全没机会执行到后续的cmp al,'4'和reset调用逻辑。
另外,所有子函数(view_activites、view_workshop等)末尾的ret指令都是多余的——因为jmp DisplayMenu已经让程序跳走,ret永远不会被执行到,可直接删除。
修复步骤
- 修正菜单判断逻辑,给选项3和4加上条件跳转:
cmp al, '1' je view_activites cmp al, '2' je view_workshop cmp al, '3' je view_comp cmp al, '4' je reset
- 删除子函数末尾多余的
ret,例如view_activites中的:
jmp DisplayMenu ret ; 删掉此行
其他子函数的ret做同样处理。
- 修正
view_comp的提示文本,当前代码调用的是msg(活动提示),应改为msg3以显示竞赛相关内容:
view_comp: mov ah,09h mov dx,offset msg3 ; 替换原msg为msg3 int 21h
- 修正菜单提示文本,把
Enter a choice (1 to 2):改为Enter a choice (1 to 4):,和实际选项对应。
内容的提问来源于stack exchange,提问作者Kaze
相关产品推荐
相关产品推荐

