8086延迟子程序怎么写

1.8086汇编怎么实现延时
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; Subroutine 延时指定的时钟嘀嗒数
; 入口:
; Didas=时钟嘀嗒数(1秒钟约嘀嗒18.2次,10秒钟嘀嗒182次 。若延时不是秒的10数次倍,误差稍微大点)
Delay Proc Near
push dx
push cx
xor ax,ax
int 1ah
mov cs:Times,dx
mov cs:Times[2],cx
Read_Time: xor ax,ax
int 1ah
sub dx,cs:Times
sbb cx,cs:Times[2]
cmp dx,Didas
jb Read_Time
pop cx
pop dx
ret
Times dw 0,0
Delay EndP
; -----------------------------------------
Didas equ 182 ;延时10秒
Start: call Delay ;这个延时子程序与CPU速度没有关系,通用的
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
2.跪求8086/8088系统的汇编程序延迟一秒子程序默认的时间中断是每秒产生18.2次,如果要求不精确,就用18次时钟中断来延时一秒 。
地址0:46c存放的就是这个计数器,可以读取这个,然后加上18,比较就可以实现 。代码如下:
mov ax,0
mov ds,ax
mov si,46ch
lodsw
add ax,18
mov cx,ax
loc_1:
mov si,46ch
lodsw
cmp ax,cx
jnb loc_2
jmp loc_1
loc_2:
如果要求非常精确,那就要直接对定时器进行编程,通过端口操作来实现 。
3.8086汇编怎么实现延时; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; Subroutine 延时指定的时钟嘀嗒数
; 入口:
; Didas=时钟嘀嗒数(1秒钟约嘀嗒18.2次,10秒钟嘀嗒182次 。若延时不是秒的10数次倍,误差稍微大点)
Delay Proc Near
push dx
push cx
xor ax,ax
int 1ah
mov cs:Times,dx
mov cs:Times[2],cx
Read_Time: xor ax,ax
int 1ah
sub dx,cs:Times
sbb cx,cs:Times[2]
cmp dx,Didas
jb Read_Time
pop cx
pop dx
ret
Times dw 0,0
Delay EndP
; -----------------------------------------
Didas equ 182 ;延时10秒
Start: call Delay ;这个延时子程序与CPU速度没有关系,通用的
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
4.汇编语言编写一段延时1000个指令周期的子程序要求编写延时子程序,就不要使用定时器;
也不要用C语言,因为C语言的执行时间,并不确定 。
用汇编语言,是最简单、准确的 。
51单片机的程序如下:
DL1000:
MOV R7,#248
DJNZ R7,$
MOV R7,#250
DJNZ R7,$
RET
正好1000个机器周期 。
R7,是8位寄存器,其最大数值是255,不能直接存入500 。
【8086延迟子程序怎么写】

8086延迟子程序怎么写

文章插图