用汇编语言打印输入的字符串

Printing inputted string in assembly language

我想打印用户首先输入的内容。但是,它在结果之前显示转换后的大写字母。

这是我的代码:

  org 100h


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

          LEA SI,STR1
          MOV AH,01H
              
              
READ:
          INT 21H
          MOV BL,AL 

          CMP AL,0DH
          JE  DISPLAY

          XOR AL,20H
          MOV [SI],AL
          INC SI

          JMP READ        
          

DISPLAY:               
          MOV AL,"$"
          MOV [SI],AL                    

          LEA DX,UPPERCASE
          MOV AH,09H
          INT 21H   
                 
          LEA DX, STR1
          MOV AH, 09H
          INT 21H 
          
          MOV DL, BH  ; space
          MOV AH, 02H
          INT 21H               
          
          LEA DX, UPPERCASE_          
          MOV AH, 9
          INT 21H
          
          LEA DX,STR1
          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, " ================================================================= $"
    STR1 DB 255 DUP(?)

输出:

Input a 5-letter string: asdfg

The uppercase equivalent of ASDFG is ASDFG

                             ^ i want this part to print as `asdfg`

成功 The uppercase equivalent of asdfg is ASDFG

P.S。另外,如何将字符串限制为 5 个?这是因为用户可以输入的字符串可以超过5个。有什么提示吗?

============================================= =================================

您分别显示字符串 UPPERCASESTR1UPPERCASE_STR1,难怪 STR1 保持不变。您需要再保留一个字符串 STRorig 用于在大小写更改之前存储获取的字符。
您可以使用 DI 来解决 STRorig 然后执行 STOSB 将原始 AL 保存到 ES:DI 并递增 DI.

当你想限制输入字符串的大小时,比较SISTR1 + 5,如果在上面,就好像AL等于0DH