2017-01-16 12 views
-1
MODEL SMALL 
    .DATA 
    MSG DB 0DH,0AH, ' ENTER THE STRING :-----> : $' 
    MSG2 DB 0DH,0AH, ' YOUR STRING IS :-----> : $' 
    STR1 DB 255 DUP(?) 
    ONE DB ? 
    TWO DB ? 
    .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 

    XOR AL,20H 
    MOV [SI],AL 
    INC SI 

    ;CMP BL,0DH 
    JMP READ 

DISPLAY: 
    MOV AL,'$' 
    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 

Этот код должен изменить строчные буквы строки в прописные буквы, но я не понимаю ...Можете ли вы объяснить этот код для меня - я не могу это понять?

+3

Какая часть у вас есть проблемы с? Я угадаю и скажу, что это «XOR AL, 20H», который фактически выполняет сопоставление. Если вы посмотрите на таблицу ascii, вы увидите, что вам нужно перевернуть этот бит для преобразования, и xor может сделать это за вас. – Jester

ответ

3

часть, которая делает новообращенного является «скрытым» в поле ввода петли

MOV AH,01H 
READ: 
    INT 21H   ; DOS 21h/01h reads char from stdin 
    MOV BL,AL   

    CMP AL,0DH   ; exit loop if Enter was pressed 
    JE DISPLAY 

    XOR AL,20H   ; <-- here the case is switched, in ascii 
        ;  Bit 0x20 defines upper/lowercase 

    MOV [SI],AL  ; store converted byte in output string 
    INC SI 

    ;CMP BL,0DH 
    JMP READ   ; perform the loop 

пс: у вас есть проблема в этом цикле, это преобразование все, что были введены, даже если это не письмо

+1

Будем надеяться, что все читают «ps:». Это самая важная часть ответа. –

 Смежные вопросы

  • Нет связанных вопросов^_^