我想寫一個程序,從鍵盤讀取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