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

📄 happy.asm

📁 微机原理——接口应用编程源码
💻 ASM
字号:
stack segment stack
	dw 100 dup(?)
stack ends

data segment
bg	db 0Ah,0DH
freq	dw 196,196,220,196,262,247
	dw 196,196,220,196,294,262	
	dw 196,196,392,330,262,247,220
	dw 349,349,330,262,294,262
	dw 196,196,220,196,262,247
	dw 196,196,220,196,294,262	
	dw 196,196,392,330,262,247,220
	dw 349,349,330,262,294,262
	dw 0

time	dw 2 dup(500,500,1000,1000,1000,2000)
	dw 500,500,1000,1000,1000,1000,2000
	dw 500,500,1000,1000,1000,2000
	dw 2 dup(500,500,1000,1000,1000,2000)
	dw 500,500,1000,1000,1000,1000,2000
	dw 500,500,1000,1000,1000,2000;时间数据

data ends
code segment
	assume cs:code,ds:data,es:data,ss:stack
stat	proc far
begin:	push ds
	mov ax,0
	push ax
	mov ax,data
	mov ds,ax
	mov es,ax
	mov ax,stack
	mov ss,ax
	mov dx,offset bg
	mov ah,09h
	int 21h
	mov si,offset freq
	mov bp,offset time
	call sing
	ret
stat	endp

sing	proc near
	push di
	push si
	push bp
	push bx
repte:	mov di,[si]
	cmp di,0
	je EndSing
	mov bx,ds:[bp]
	call sound
	add si,2
	add bp,2
	jmp repte
EndSing:pop bx
	pop bp
	pop si
	pop di
	ret
sing	endp

sound	proc near
	push ax
	push bx
	push cx
	push dx
	push di
	mov al,0b6h	;8253初始化为:计数器2工作在方式3
	out 43h,al
	mov dx,012h	;计算时间常数
	mov ax,34dch
	div di
	out 42h,al	;时间数预置计数器2,先送低8位,后送高8位
	mov al,ah
	out 42h,al
	in al,61h
	mov ah,al
	or al,3
	out 61h,al	;开喇叭(8255A礔腎/O端口61H的低两位置1)
delay:	mov cx,8000h
dlms:	nop
	nop
	loop dlms
	dec bx
	jnz delay
	mov al,ah
	out 61h,al
	pop di
	pop dx
	pop cx
	pop bx
	pop ax
	ret
sound endp
code ends
end begin
	

⌨️ 快捷键说明

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