2017-01-16 2 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 

Dieser Code soll Kleinbuchstaben einer Zeichenkette in Großbuchstaben ändern, aber ich verstehe es nicht ...Können Sie diesen Code für mich erklären - ich kann es nicht gut verstehen?

+3

Welcher Teil ist haben Sie Probleme haben? Ich werde raten und sagen, dass es das 'XOR AL, 20H' ist, das tatsächlich das Mapping durchführt. Wenn Sie sich eine ASCII-Tabelle ansehen, werden Sie sehen, dass Sie nur das eine Bit umwandeln müssen, um es zu konvertieren, und xor kann das für Sie tun. – Jester

Antwort

3

der Teil, „versteckt“ in der Entry-Level-Schleife tun die convert ist, ist

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 

ps: Sie haben ein Problem in dieser Schleife, Konvertieren es alles, was eingegeben worden ist, auch wenn es kein Brief

+1

Hoffen wir, dass jeder das "ps:" liest. Es ist der wichtigste Teil der Antwort. –

Verwandte Themen