2017-01-16 8 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'라고 추측하고 말할 것입니다. 아스키 테이블을 보면 변환 할 비트 하나만 뒤집어서 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 :"를 읽길 바랍니다. 대답의 가장 중요한 부분입니다. –

관련 문제