2014-11-06 2 views
0

У меня есть следующий код, который задерживает печать сообщения, указанного пользователем. Но, имея проблемы в понимании этого. Например: В строке 23, почему написано MOV AX, BX, я не вижу, чтобы BX содержал любое значение, чем то, что перемещено в регистре AX? Кроме того, почему мы пишем MOV CL, 0AH. Пожалуйста помоги!Счетчик задержки времени в 8086

.MODEL SMALL 
.DATA 

MSGIN DB 'Enter delay duration (0-50): $' 
MSG1 DB 'This is Microprocessor!$' 
DELAYTIME DW 0000H 

.CODE 

MOV DX,@DATA 
MOV DS,DX 
LEA DX,MSGIN 
MOV AH,09H 
INT 21H 

IN1:  
    MOV AH,01H 
    INT 21H 
    CMP AL,0DH ; 
    JE NXT 
    SUB AL,30H 
    MOV DL,AL 
    MOV AX,BX 
    MOV CL,0AH 
    MUL CL 
    MOV BX,AX 
    AND DX,00FFH 
    ADD BX,DX 
    MOV DELAYTIME,BX 
    LOOP IN1 


NXT:  MOV CX,DELAYTIME 
     MOV DL,10 
     MOV AH,02H 
     INT 21H 

LEA SI,MSG1 

LP: PUSH DX 
    MOV DL,[SI] 
    CMP DL,'$' 
    JE NXT2 
    MOV AH,02H 
INT 21H 
ADD SI,1 
POP DX 
MOV DI,DELAYTIME 
MOV AH, 0 
INT 1Ah 
MOV BX, DX 

Delay: 
MOV AH, 0 
INT 1Ah 
SUB DX, BX 
CMP DI, DX 
JA Delay 

LOOP LP 

    NXT2: MOV AH,4CH 
      INT 21H 


END 
+0

_ «Почему мы пишем' MOV CL, 0AH'? »_ Чтобы переместить значение' 0AH' (== '10') в регистр' CL'. – Michael

ответ

0

Петля, начинающаяся с IN1, считывает ряд символов, заканчивающихся возвратом каретки. Символы считаются десятичными цифрами и преобразуются в двоичное число в BX.

BX считается нулевым при вводе программы.