我想写一个程序,从键盘读取3个字符串,然后显示2个字符串以小写字母和最后一个以大写字母。以下是我到目前为止的内容:我可以读取字符串,但它会将所有内容都转换为大写。无论如何只转换最后一个字符串?在此先感谢组装x86上拆分字符串16位
.MODEL SMALL
.DATA
MSG DB 0DH,0AH, 'ENTER A STRING: $'
MSG2 DB 0DH,0AH, ' YOUR STRING IS :-----> : $'
STR1 DB 255 DUP(?)
.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
SUB AL,20H
MOV [SI],AL
INC SI
;CMP BL,0DH
JMP READ
DISPLAY:
MOV AL,'$' ;caracter '$'
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
我正在使用TASM。
*有没有反正只转换最后一个字符串?*是的,当然有。一种方法是跟踪前两个字符串末尾的位置,以便在完成读取输入后,可以只循环最后一个字符串。 –
对不起,但你触发我的讽刺...像“不,电脑中的所有字符串现在必须大写”。你基本上回答你自己的问题。只是不转换前两个字符串,然后只有第三个字符串将被转换。试着把它看作一个计算,将问题分解成一些公式,计数器,数字操作......甚至字符串只是ASCII编码中连续字节值(0-255)的流。所以如果你只想用某些特定的字符串做某些事情,那么首先要定义字符串开始/停止(每个空间)的方式。数它们。在第三个执行大写字母 – Ped7g
'sub al,20h'对于“大写字母”有点蹩脚,它会对大写字母做些什么,比如“A”?检查'AND',然后看它是如何工作的,然后查看ASCII表......它是专门为这个任务设计的,这就是为什么'a''是'A'或'0x20',而不是' 'Z' + 1'。 – Ped7g