You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:09:03