2016-07-12 2 views
0

хороший день каждый, я новичок на этом языке, и вот код, который был изменен, который должен принимать вход ABC и возвращать ABC, но он возвращает ABB. я попробовал его с AH, BH и Axe, Bx все хуже. Как мне это изменить (пока наш учитель хочет, чтобы мы придерживались MOV, INT, LEA и того, что здесь находится в коде). спасибо за советы и ответыemu8086 Assembly Входной сигнал с тремя символами

.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

Совет: узнайте, как отлаживать. Пройдите через свой код, просмотрите значения регистра. –

ответ

1

В строке 14, вы сохраните третий символ в DL, но, позже, вы потеряете это значение, назначая ODH и OAH в DL. Решение прост: сохраните третий символ в другом регистре вместо DL, например CH, внизу вы отобразите CH вместо DL (стрелки < ============================================ изменения):

.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 

Я выбрал CH, потому что это регистр, который не используется в коде.

+0

получается, что я не мог использовать Bx. большое спасибо. плохо закончите код отсюда. спасибо за ответ jose – user3410855

+0

@ user3410855, если ответ был полезен, вы можете нажать галочку, чтобы принять его^_º –