用汇编语言打印输入的字符串
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个。有什么提示吗?
============================================= =================================
您分别显示字符串 UPPERCASE
、STR1
、UPPERCASE_
、STR1
,难怪 STR1
保持不变。您需要再保留一个字符串 STRorig
用于在大小写更改之前存储获取的字符。
您可以使用 DI
来解决 STRorig
然后执行 STOSB
将原始 AL
保存到 ES:DI
并递增 DI
.
当你想限制输入字符串的大小时,比较SI
和STR1 + 5
,如果在上面,就好像AL
等于0DH
。
我想打印用户首先输入的内容。但是,它在结果之前显示转换后的大写字母。
这是我的代码:
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个。有什么提示吗?
============================================= =================================
您分别显示字符串 UPPERCASE
、STR1
、UPPERCASE_
、STR1
,难怪 STR1
保持不变。您需要再保留一个字符串 STRorig
用于在大小写更改之前存储获取的字符。
您可以使用 DI
来解决 STRorig
然后执行 STOSB
将原始 AL
保存到 ES:DI
并递增 DI
.
当你想限制输入字符串的大小时,比较SI
和STR1 + 5
,如果在上面,就好像AL
等于0DH
。