Assembly 你能给我解释一下这个代码吗?我能';我不太明白?

Assembly 你能给我解释一下这个代码吗?我能';我不太明白?,assembly,dos,masm,x86-16,Assembly,Dos,Masm,X86 16,这段代码应该将字符串的小写字母改为大写字母,但我不明白…转换的部分在输入循环中是“隐藏”的 MODEL SMALL .DATA MSG DB 0DH,0AH, ' ENTER THE STRING :-----> : $' MSG2 DB 0DH,0AH, ' YOUR STRING IS :-----> : $' STR1 DB 255 DUP(?) ONE DB ? TWO DB ? .CODE BEGIN:

这段代码应该将字符串的小写字母改为大写字母,但我不明白…

转换的部分在输入循环中是“隐藏”的

MODEL SMALL
  .DATA
    MSG  DB  0DH,0AH, ' ENTER THE STRING :-----> :  $'
    MSG2 DB  0DH,0AH, ' YOUR STRING IS  :-----> :  $'
    STR1 DB  255 DUP(?)
    ONE  DB ?
    TWO  DB ?
  .CODE
BEGIN:
  MOV AX,@DATA
  MOV DS,AX

  LEA DX,MSG
  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

  ;CMP BL,0DH
  JMP READ

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

  LEA DX,MSG2
  MOV AH,09H
  INT 21H

  LEA DX,STR1
  MOV AH,09H
  INT 21H

 ; MOV AH,4CH
 ; INT 21H
  .EXIT
END BEGIN 
MOV-AH,01H
阅读:
INT 21H;DOS 21h/01h从标准输入读取字符
莫夫比勒,艾尔
CMP-AL,0DH;如果按Enter键,则退出循环
日本脑炎显示器

XOR-AL,20H;哪一部分你有问题?我会猜测并说它是真正进行映射的
XOR AL,20H
。如果你看一个ascii表,你会发现你只需要翻转那一位就可以转换,xor可以帮你做到这一点。这是答案中最重要的部分。
  MOV AH,01H
READ:
  INT 21H            ; DOS 21h/01h reads char from stdin
  MOV BL,AL          

  CMP AL,0DH         ; exit loop if Enter was pressed 
  JE  DISPLAY

  XOR AL,20H         ; <-- here the case is switched, in ascii
                     ;     Bit 0x20 defines upper/lowercase

  MOV [SI],AL        ; store converted byte in output string
  INC SI

  ;CMP BL,0DH
  JMP READ           ; perform the loop