【发布时间】:2017-03-12 22:06:39
【问题描述】:
我正在尝试编写一个程序,它从键盘读取 3 个字符串,然后以小写显示 2 个字符串,最后一个以大写显示。这是我到目前为止所得到的:我可以读取字符串,但随后它将所有内容都转换为大写。无论如何只转换最后一个字符串?提前致谢
.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) 流。因此,如果您只想对某些特定字符串执行某些操作,请首先定义如何决定字符串何时开始/停止(每个空格?)。数一数。 3日执行大写
-
而
sub al,20h是“大写”的一种有点蹩脚的方式,它会如何处理已经大写的字母,比如'A'?而是检查AND,它是如何工作的,然后查看 ASCII 表......它是专门为这个任务设计的,这就是为什么'a'是'A' OR 0x20,而不是'Z'+1。
标签: assembly x86 dos tasm 16-bit