2016-07-12 11 views
0

Guten Tag alle, ich bin neu in dieser Sprache und hier ist ein Code ich modifiziert, die Eingabe akzeptieren ABC und ABC zurückgeben sollte, aber es zurück ABB. Ich habe es mit AH, BH und Ax versucht, Bx wird schlimmer. Wie ändere ich das? (Vorerst möchte unser Lehrer, dass wir bei MOV, INT, LEA bleiben und was hier auf dem Code steht). Vielen Dank für Tipps und Antwortenemu8086 Assembly Input-Ausgabe mit drei Zeichen

.MODEL SMALL 
    .STACK 100H 
    .CODE 
    MOV AH, 01H ; Character input with echo 
    INT 21H ; Character in AL 
    MOV BL, AL ; Save in BL  

    MOV AH, 01H ; Character input with echo 
    INT 21H ; Character in AL 
    MOV CL, AL ; Save in CL 

    MOV AH, 01H ; Character input with echo 
    INT 21H ; Character in AL 
    MOV DL, AL ; Save in DL 

    MOV AH, 02H ; Display character function  

    MOV DL, 0DH ; carriage return 
    INT 21H 

    MOV DL, 0AH ; line feed 
    INT 21H 

    MOV DL, BL ; Get character stored in BL and display 
    INT 21H 
    MOV DL, CL ; Get character stored in CL and display 
    INT 21H 
    MOV DL, DL ; Get character stored in DL and display 
    INT 21H 

    MOV AH, 4CH 
    INT 21H 
    END 
+2

Tipp: Lernen Sie zu debuggen. Durchlaufen Sie Ihren Code, beobachten Sie die Registrierungswerte. –

Antwort

1

In Zeile 14, können Sie das dritte Zeichen in DL speichern, aber später Sie diesen Wert durch die Zuordnung ODH und OAH zu DL verlieren. Die Lösung ist einfach: Speichern Sie das dritte Zeichen in einem anderen Register statt DL, zum Beispiel CH, unten sehen Sie CH statt DL (Pfeile < ============== zeigen Sie auf die Änderungen):

.MODEL SMALL 
    .STACK 100H 
    .CODE 
    MOV AH, 01H ; Character input with echo 
    INT 21H ; Character in AL 
    MOV BL, AL ; Save in BL  

    MOV AH, 01H ; Character input with echo 
    INT 21H ; Character in AL 
    MOV CL, AL ; Save in CL 

    MOV AH, 01H ; Character input with echo 
    INT 21H ; Character in AL 
; MOV DL, AL ; Save in DL 
    MOV CH, AL ; <============================ 

    MOV AH, 02H ; Display character function  

    MOV DL, 0DH ; carriage return 
    INT 21H 

    MOV DL, 0AH ; line feed 
    INT 21H 

    MOV DL, BL ; Get character stored in BL and display 
    INT 21H 
    MOV DL, CL ; Get character stored in BL and display 
    INT 21H 
; MOV DL, DL ; Get character stored in BL and display 
    MOV DL, CH ; <============================ 
    INT 21H 

    MOV AH, 4CH 
    INT 21H 
    END 

Ich wählte CH, weil es ein Register ist, das nicht im Code verwendet wurde.

+0

stellt sich heraus, ich könnte Bx nicht verwenden. vielen Dank. Ich beende den Code von hier. Danke für die Antwort jose – user3410855

+0

@ user3410855, wenn die Antwort nützlich war, können Sie auf das Häkchen klicken, um es zu akzeptieren^_º –