2014-11-06 104 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 2014-11-06 07:16:23

回答

0

從IN1開始的循環讀取一系列由回車符終止的字符。字符假定爲十進制數字,並在BX中轉換爲二進制數字。

當程序進入時,BX被假定爲零。