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

It looks like you are trying to convert a string from lower case to upper case? The problem is that you are only comparing input against the letter 'a':

cmp al, 'a' 
jnb upper

If you want to convert from lowercase to upper case, you need to check for characters in the range from 'a' to 'z', and if once is in that range then subtract 32.

Also, I think you want to write the uppercase char back to memory in upper. All you are doing is updating the register, which is then overwritten in the next iteration of loop1.

Does that help?

于 2010-05-08T16:56:49.150 回答
1

我发现了我的问题:当我输入文本时,'$' - 没有添加。

于 2010-05-10T12:11:27.563 回答