⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delay.asm

📁 PC计算机钢琴程序子程序: 包括以下资料 软件:提取音乐代码的软件工具(自己用VB写的) 资料:所有与按键和PC Sound有关资料 唱歌:包括歌曲有 聚萍、同一首歌、月亮代表我的心、美丽的神
💻 ASM
字号:
;/*---------------------------*/
;数据段定义
data 	segment								;数据定义段
	assume		ds:data						;建立数据段寄存器寻址
msg_1   db	'I love you ''ASM'' from the bottom of my heart! $',0dh,0ah	;定义字节
msg_2	db	0dh,0ah,'In this OS. I''l use lookup table to display number''s square$'
msg_3	db	0dh,0ah,' $'
table	db	1,2,3,4,5,6,7,8,9					;数据加1
data	ends								;数据定义段结束
;/*---------------------------*/



;/*---------------------------*/
;代码段定义
code    segment				;代码定义段
        assume		cs:code		;建立代码段寄存器寻址
;/*---------------------------*/



;/*---------------------------*/
;字符显示
show	macro 		str		;宏定义,输入参数:字符串str
        lea		dx,str		;装入str的有效地址
        mov 		ah,09h		;调用中断21,09h显示字符串
        int 		21h	
        endm				;宏定义结束
;/*---------------------------*/



;/*---------------------------*/
;主函数
main	proc		far		;主函数过程定义
	mov 		ax,data		;取数据段地址
	mov 		ds,ax		;装载数据段寄存器ds,使之指向当前数据段
	call		set_video	;设置显示模式
	show		msg_1		;调用宏,显示字符串
	show		msg_2
	show		msg_3
;/*---------------------------*/




;/*---------------------------*/
;按键扫描
key_scan:
	mov		ah, 0		;利用bios的16号中断,扫描键盘按键
	int		16h		;AL中返回按键的ASCII码,AH中返回按键的扫描码
	cmp		al, 0dh		;判断是否为Enter键
	jz		exit		;是回车键就退出

	cmp		al, 1bh		;判断是否为Esc键
	jz		exit		;是退出键就退出
	
	and		ax,000fh	;取低四位
	mov		bx,ax
	mov		al,table[bx]	;取得对应数组下标值的值
	
	mov		ah,02h		;21号中断,02h输出字符
	add		al,48		;转换为字符的ASCII码
	mov		dl,al		;dl要显示的字符
	int		21h
	show		msg_3
	call		beep
	
	jmp		key_scan	;否则继续扫描
;/*---------------------------*/	



;/*---------------------------*/
;退出
exit:
        mov 		ah,4ch		;调用中断21,4ch退出系统
        int 		21h
;/*---------------------------*/



;/*---------------------------*/
main	endp				;主函数过程结束
;/*---------------------------*/



;/*---------------------------*/
;固定频率响
beep    proc		near
	
	mov		ax,1200
	out		42h,al		;输出频率值,低8位
	mov		al,ah
	out		42h,al		;输出频率值,高8位

	in		al,61h		;开启定时器
	or		al,03h		
	out		61h,al
	
	mov		ah,00h		;取时钟计数值
	int		1ah
	mov		al,9		;9.1次为0.5秒
	cbw                          	;al值转为16位ax
	add		ax,dx		;加上当前时钟计数值,得到计数终值
	mov		bx,ax		;计数终值置入bx
delay:	mov		ah,00h
	int		1ah		;取时钟计数值
	cmp		bx,dx		;到终值吗?
	jnz		delay		;未到,继续延时

	in		al,61h		;关闭定时器
	and		al,0fch
	out		61h,al			

	ret
beep    endp
;/*---------------------------*/



;/*---------------------------*/
;设置彩色显示模式
set_video  proc		near
        mov 		ah,00                ;320*200彩色屏幕
        mov 		al,04
        int 		10h
        mov 		ah,0bh               ;背景色              
        mov 		bh,00
        mov 		bl,1
        int 		10h
	ret
set_video  endp
;/*---------------------------*/




;/*---------------------------*/
code	ends				;代码段结束
	end		main		;主程序结束
;/*---------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -