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