延时计数器在8086年

时间:2014-11-06 06:30:32

标签: x86 emulation x86-16

我有以下代码延迟打印用户指定的消息。但是,在理解它时遇到了问题。例如:在第23行,为什么它写成MOV AX,BX,我看不到BX包含任何值,然后在AX寄存器中移动了什么?另外,为什么我们写MOV CL,0AH。请帮忙!

.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

1 个答案:

答案 0 :(得分:0)

从IN1开始的循环读取由回车符终止的一系列字符。假定字符为十进制数字,并在BX中转换为二进制数。

当输入程序时,BX被假定为零。