【问题标题】:Printing inputted string in assembly language用汇编语言打印输入的字符串
【发布时间】:2021-11-04 14:19:20
【问题描述】:

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

这是我的代码:

  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

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

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

【问题讨论】:

  • 在我回答了你的previous questions之后你问这个问题我觉得很担心。解决方案一直存在。您可以随时在答案下方留下评论以获得额外说明。真正糟糕的是,您显然可以“接受”这个微型答案,但不能接受我的答案。你知道,我赞成你的问题,其他人没有...

标签: string assembly x86-16 emu8086


【解决方案1】:

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

当您想限制输入字符串的大小时,将SISTR1 + 5 进行比较,如果在上面,则将AL 视为等于0DH

【讨论】:

    猜你喜欢
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    相关资源
    最近更新 更多