8086汇编注册功能两次密码无法比对问题求修复方案
8086汇编用户系统注册密码比对问题修复
存在的问题
- 菜单选择逻辑错误
代码读取用户菜单选择后,错误执行了mov NUM1,'1',直接覆盖了用户的输入值,且缺少cmp比较指令就直接用JE跳转,逻辑完全错误。 - SI寄存器未重置
第一次输入密码时SI会随着字符输入不断自增,输入完成进入确认密码环节时,没有把SI重置为0,导致确认密码的内容被写入CPASS数组的偏移位置,和RPASS存储的内容位置完全不匹配,比对必然失败。 - 比对循环参数错误
进入比对逻辑前,给CX赋值为0,loop指令判断CX为0会直接终止循环,根本不会执行逐字符比对的逻辑。 - 比对逻辑错误
多余的cmp dl,[RPASS+bx]语句,此时dl没有存储RPASS对应位置的字符,属于无效操作,即使后续比对也拿不到正确的RPASS值。 - 成功分支未跳转
就算比对成功输出了注册成功提示,代码也会继续往下执行Fail分支的逻辑,最终同时输出成功和失败提示。
修复方案
1. 修复菜单选择逻辑
; 原错误代码 mov NUM1,al mov NUM1,'1' JE REGISTER ; 替换为 mov NUM1,al cmp NUM1,'1' ; 新增cmp指令做值比较 JE REGISTER cmp NUM1,'2' JE LOGIN ; 可补充对应登录跳转逻辑 cmp NUM1,'3' JE exit
2. 确认密码前重置SI
Comfirm: mov ah,09h lea dx,Pass int 21h mov si,0 ; 新增这行,把SI重置为0后再输入确认密码 DisC: MOV AH,08H INT 21H
3. 修正比对逻辑
; 原错误代码 mov bx,0 mov cx,0 compare: mov al,[CPASS+bx] cmp dl,[RPASS+bx] cmp al,dl jne FAIl inc bx loop compare mov ah,09h lea dx,str4 int 21h Fail: ; 替换为 mov bx,0 mov cx,si ; CX赋值为SI的值,即为两次输入的密码长度 compare: mov al,[CPASS+bx] mov dl,[RPASS+bx] ; 主动读取RPASS对应位置的字符到dl cmp al,dl jne Fail inc bx loop compare mov ah,09h lea dx,str4 int 21h jmp exit ; 注册成功后直接跳转到退出,避免执行失败分支逻辑 Fail:
内容的提问来源于stack exchange,提问作者ying wei
相关产品推荐
相关产品推荐

