附上测试代码:
assume cs:codesg
codesg segment
start:
mov al, 0
out 70h, al
in al, 71h
and al, 00001111b
add al, 30h
mov ah, 9
mov bl, 7
mov bh, 0
mov cx, 1
int 10h
mov bx, 2000
call Sleep
mov al, 0
out 70h, al
in al, 71h
and al, 00001111b
add al, 30h
mov ah, 9
mov bl, 7
mov bh, 0
mov cx, 1
int 10h
mov ax, 60
mov ah, 1
int 21h
mov ax, 4c00h
int 21h
;功能:延时
;参数:bx = 毫秒(带符号,最大取值7fffh)
;说明:延时的时间越长误差越大,取最大值误差3秒左右
Sleep proc
_Sleep0:
mov ah, 2ch
int 21h
mov cs:[_cmptime], dl
_Sleep1:
mov ah, 2ch
int 21h
cmp cs:[_cmptime], dl
je _Sleep1
sub bx, 55
cmp bx, 0
jg _Sleep0
ret
_cmptime:
db 0
Sleep endp
codesg ends
end start |