2016-10-30 19 views
0

我想写一个程序,从键盘读取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。

+1

*有没有反正只转换最后一个字符串?*是的,当然有。一种方法是跟踪前两个字符串末尾的位置,以便在完成读取输入后,可以只循环最后一个字符串。 –

+2

对不起,但你触发我的讽刺...像“不,电脑中的所有字符串现在必须大写”。你基本上回答你自己的问题。只是不转换前两个字符串,然后只有第三个字符串将被转换。试着把它看作一个计算,将问题分解成一些公式,计数器,数字操作......甚至字符串只是ASCII编码中连续字节值(0-255)的流。所以如果你只想用某些特定的字符串做某些事情,那么首先要定义字符串开始/停止(每个空间)的方式。数它们。在第三个执行大写字母 – Ped7g

+2

'sub al,20h'对于“大写字母”有点蹩脚,它会对大写字母做些什么,比如“A”?检查'AN​​D',然后看它是如何工作的,然后查看ASCII表......它是专门为这个任务设计的,这就是为什么'a''是'A'或'0x20',而不是' 'Z' + 1'。 – Ped7g

回答

0

谢谢大家的意见。我能够这样解决:

.MODEL SMALL 
.STACK 100h 
.DATA 
    Mensagem1 DB "Meu Prompt>>",'$',13,10 
    first DB 80 DUP (?) 
.CODE 
    MOV AX, @DATA 
    MOV DS, AX 
    LEA DX, Mensagem1 
    MOV AH, 9 
    INT 21H 
    LEA SI, first 
READ: 
    MOV AH, 01H 
    INT 21H 
    CMP AL, 13 
    JE DONE 
    OR AL, 20H 
    MOV [SI], AL 
    INC SI 
    CMP AL, 20H 
    JE READ2 
    JMP READ 
READ2: 
    INT 21H 
    CMP AL, 13 
    JE DONE 
    OR AL, 20H 
    MOV [SI], AL 
    INC SI 
    CMP AL, 20H 
    JE READ3 
    JMP READ2 
READ3: 
    INT 21H 
    CMP AL, 13 
    JE DONE 
    XOR AL, 20H 
    MOV [SI], AL 
    INC SI 
    JMP READ3 
DONE: 
    MOV AL, '$' 
    MOV [SI], AL 
    LEA DX, Mensagem1 
    MOV AH, 9 
    INT 21H 
    LEA DX, first 
    MOV AH, 9 
    INT 21H 
    MOV AH,4CH 
    INT 21H 
END 
+0

'异或AL,20H'翻转案件,这是不同于总是使它大写。此外,如果您想确保不更改非字母字符(例如''''或''7'),您需要一些条件。有几个关于http://stackoverflow.com/questions/35932273/how-to-access-a-char-array-and-change-lower-case-letters-to-upper-case-and-vice的详细答案。 –