2016-10-30 14 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

*最後の文字列のみを変換する方法はありますか?*はい、もちろんあります。 1つの方法は、最初の2つの文字列の最後の位置を追跡することです。入力を読み終えたら最後の文字列だけをループすることができます。 –

+2

申し訳ありませんが、あなたは私の皮肉を激しく誘発します... "いいえ、コンピュータのすべての文字列は現在大文字でなければなりません"のように。あなたは基本的にあなた自身の質問に答えます。最初の2つの文字列を変換しないと、3つ目の文字列だけが変換されます。それを計算として考えて、数式、カウンタ、数値操作に問題を壊してください...文字列さえASCIIコードで連続したバイト値(0-255)のストリームです。だから、特定の文字列だけで何かをしたいのであれば、最初に文字列の開始/停止を決める方法を定義してください(スペースごとに?)。それらを数える。 3番目に大文字を実行する – Ped7g

+2

'' sub al、20h'は "大文字"に少し不十分ですが、 '' A''のように既に大文字にするのでしょうか? '' AND''を '' A 'OR 0x20'とした理由は '' AND''をチェックし、それがどのように動作しているかを確認してから、ASCIIテーブルを見てください。 '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

'XOR AL、20H'は常に大文字にするのとは異なるケースを反転します。また、アルファベット以外の文字(例えば '' - ''や '' 7 '')を変更しないようにするには、いくつかの条件が必要です。 http://stackoverflow.com/questions/35932273/how-to-access-a-char-array-and-change-lower-case-letters-to-pper-case-and-viceにいくつかの詳細な回答があります。 –

関連する問題