在汇编语言中,延时子函数用的也较多,在这里同样要编写一个子函数
CPU在执行语句的时候也是需要耗时的,只是CPU运行速度太快,我们没办法看清楚,所以如果CPU执行语句越多,所需要的时间就越多,根据这个原理,就可以通过让CPU随便执行语句,起到延时的效果,这被称为“软件延时”,CPU执行一条指令耗时近似1us,就可以通过这种办法加上循环就可以实现延时效果
这里可以用一个大数字减法和循环的办法来实现延时
任务:编写一个函数,在屏幕中显示一个可以看清的a~z
代码:
assume cs:code
code segment
start: mov ax, 0B800H
mov ds, ax
mov al, 'a'
s: mov ds:[10*160 + 8*2], al
mov byte ptr ds:[10*160 + 8*2 + 1], 2
call delay ;调用延时的子程序,方便显示
cmp al, 'z'
je s0
inc al
jmp s
s0: mov al, 'a'
jmp s
send: mov ax, 4C00H
int 21H
delay: push dx
push ax
mov dx, 10H
mov ax, 0
s1: sub ax, 1 ;-1的反码是65535
sbb dx, 0 ;此时CF寄存器是1,则dx-1
cmp ax, 0 ;内循环
jne s1
cmp dx, 0 ;外循环
jne s1
pop ax
pop dx
ret
code ends
end start
这里用到了一个嵌套循环将减法分为高位和低位来做减法,直到高位为零且低位为零为止
运行结果:
做不了动画,就截取两种不同时间下显示的字符