0
org 0x100
SEGMENT .CODE
    mov ah,0x9
    mov dx, Msg1
    int 0x21

    ;string input
    mov ah,0xA
    mov dx,buff
    int 0x21
    mov ax,0
    mov al,[buff+1]; length

    ;string UPPERCASE    
    mov cl, al  
    mov si, buff
    cld
loop1:
    lodsb;
    cmp al, 'a' 
    jnb upper
loop loop1
;output
mov ah,0x9
mov dx, buff
int 0x21

exit:
    mov ah, 0x8
    int 0x21
    int 0x20
upper:
    sub al,32 
    jmp loop1
SEGMENT .DATA
Msg1 db 'Press string: $'
buff db 254,0

このコードは機能しません。問題はにあると思いますjnb upper。このプログラムは、小文字を大文字に変換する必要があります。

4

2 に答える 2

1

文字列を小文字から大文字に変換しようとしているようですか?問題は、入力を文字「a」とのみ比較していることです。

cmp al, 'a' 
jnb upper

小文字から大文字に変換する場合は、「a」から「z」の範囲の文字をチェックする必要があります。その範囲にある場合は、32を減算します。

また、大文字の文字をメモリに書き戻したいと思いますupper。レジスタを更新するだけで、次のの反復で上書きされますloop1

それは役に立ちますか?

于 2010-05-08T16:56:49.150 に答える
1

私は自分の問題を発見しました:私がテキストを入力していたとき、「$」-追加されませんでした。

于 2010-05-10T12:11:27.563 に答える