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

汇编语言字符串输入打印、大小写转换及输入长度限制问题求助

8086汇编小写转大写功能问题修复方案

修改后的完整代码

org 100h

BEGIN:
          LEA DX, DASH1          
          MOV AH, 9
          INT 21H
          
          LEA DX,LOWERCASE
          MOV AH,09H
          INT 21H

          LEA SI, STR_RAW      ; SI指向原始字符串缓冲区
          LEA DI, STR_UPPER    ; DI指向大写字符串缓冲区
          XOR CX, CX           ; CX清零,作为输入计数器
          MOV AH,01H
              
              
READ:
          INT 21H
          MOV BL,AL 

          CMP AL,0DH
          JE  DISPLAY
          
          INC CX               ; 有效字符,计数器+1
          MOV [SI], AL         ; 先存原始字符到原始缓冲区
          XOR AL,20H           ; 转大写
          MOV [DI], AL         ; 大写字符存到大写缓冲区
          INC SI
          INC DI
          
          CMP CX, 5            ; 判断是否达到最大输入长度5
          JE DISPLAY           ; 达到长度直接结束输入

          JMP READ        
          

DISPLAY:               
          MOV AL,"$"
          MOV [SI],AL          ; 原始缓冲区加结束符
          MOV [DI],AL          ; 大写缓冲区加结束符                 

          LEA DX,UPPERCASE
          MOV AH,09H
          INT 21H   
                 
          LEA DX, STR_RAW      ; 打印原始小写字符串
          MOV AH, 09H
          INT 21H 
          
          MOV DL, 20H          ; 输出空格
          MOV AH, 02H
          INT 21H               
          
          LEA DX, UPPERCASE_          
          MOV AH, 9
          INT 21H
          
          MOV DL, 20H          ; 输出空格
          MOV AH, 02H
          INT 21H 
          
          LEA DX,STR_UPPER     ; 打印转换后的大写字符串
          MOV AH,09H
          INT 21H 
          
          LEA DX, DASH2          
          MOV AH, 9
          INT 21H

          MOV AH,4CH
          INT 21H
         
  ret
   
    LOWERCASE  DB 0DH,0AH,0AH, "   Input a 5-letter string: $"
    UPPERCASE DB  0DH,0AH, "   The uppercase equivalent of $"
    UPPERCASE_ DB "is $"   
    DASH1 DB 0AH,0DH, " ================================================================= $"  
    DASH2 DB 0AH,0AH,0DH, " ================================================================= $"
    STR_RAW DB 255 DUP(?)   ; 原始小写字符串缓冲区
    STR_UPPER DB 255 DUP(?) ; 转换后大写字符串缓冲区

具体修改说明

  • 新增两个独立缓冲区:STR_RAW存储用户输入的原始小写字符串,STR_UPPER存储转换后的大写字符串,避免转换操作覆盖原始输入内容
  • 新增输入长度控制逻辑:使用CX作为输入计数器,初始值为0,每次输入非回车的有效字符后计数器自增,计数达到5时自动终止输入,满足最大长度限制要求
  • 调整输入存储逻辑:先将用户输入的原始字符存入STR_RAW,再执行转大写操作存入STR_UPPER,两份数据独立存储互不干扰
  • 修复原代码空格打印错误:原代码使用未初始化的BH寄存器值作为空格输出,替换为直接使用空格的ASCII码20H,避免输出乱码
  • 调整打印逻辑:输出提示语后先打印STR_RAW的原始小写内容,再打印STR_UPPER的转换后大写内容,匹配预期输出格式

内容的提问来源于stack exchange,提问作者hatzuramen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:15:04