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

📄 00.asm

📁 微机原理——接口应用编程源码
💻 ASM
字号:

	
stack segment stack
    dw 100 dup(?)
stack ends
data segment
	title1 db "Happy Birthday to you!  ",0dh
        frequency 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,0
        time dw 50,50,100,100,100,200
                dw 50,50,100,100,100,200
                dw 50,50,100,100,100,100,300
	        dw 50,50,100,100,100,200
        close dw -4
data ends
code segment
start proc far
        assume cs:code,ds:data
	push ds
	mov ax,0
	push ax
	mov ax,data
	mov ds,ax	
	LEA bx,title1
	mov ah,06h	
	int 10h	
	MOV DX,63H
	MOV AL,10000010B	
	OUT DX,AL
	mov dx,43h	
	mov al,0b6h
	out dx,al
read:
	mov si,offset close
	mov bp,offset time
	mov di,[si]
	cmp di,0
	je restart
	mov bx,ds:[bp]
	call sound
	MOV DX,61H
	in al,DX
	and al,00000001B
	jz read
restart:
	mov si,offset frequency
	mov bp,offset time
	call sing
	ret
start endp

sing proc
	push di
	push si
	push bp
	push bx
again:
	mov di,[si]
	cmp di,0
	je restart
	mov bx,ds:[bp]
	call sound
	mov ah,06h
	lea bx,title1
	int 10h
	mov dx,61h
	in al,dx
	and al,00000001b
	jz read
	add si,2
	add bp,2
	jmp again

	pop bx
	pop bp
	pop si
	pop di 
	ret
sing endp

sound proc
	push ax
	push bx
	push cx
	push dx
	push di
	mov dx,12h  ;计算时间常数
	mov ax,34dch
	div di
	out 42h,al ;设置时间常数 并将记数值输入到2#通道
	mov al,ah
	out 42h,al
delay:
	mov cx,1400  
dl10ms:	loop dl10ms  ;实现发音的单位时间10ms
	dec bx
	jnz delay
	pop di
	pop dx
	pop cx
	pop bx
	pop ax
	ret
sound endp
code ends
end start

⌨️ 快捷键说明

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