2016-10-30 22 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的詳細答案。 –