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

📄 0000.asm

📁 微机原理——接口应用编程源码
💻 ASM
字号:
stack segment stack
dw 100 dup(?)
stack ends
data segment
title1 db "Happy Birthday$"
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 25,25,50,50,50,100
          dw 25,25,50,50,50,100
          dw 25,25,50,50,50,50,150
	  dw 25,25,50,50,50,100
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 DX,title1
mov ah,06h
int 10h
MOV DX,63H
MOV AL,10000010B
OUT DX,AL
;mov ah,06H
;mov dx,offset title1
;int 10h
mov si,offset frequency
mov bp,offset time
read:
MOV DX,61H
in al,DX
and al,00000001B
jz read
call sing
ret
start endp
sing proc
push di
push si
push bp
push bx
again:
;mov si,offset frequency
;mov bp,offset time
mov di,[si]
cmp di,0
je end_sing
mov bx,ds:[bp]
;read: 
;in al,61h
;and al,1H
;jz read
call sound
add si,2
add bp,2
a:
mov dx,61h
in al,dx
add al,00000001b
jz a
jmp again
end_sing:
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,43H
mov al,0b6h  ;8253初始化 2#通道方式3
out DX,al
;mov al,10000010b  ;8255初始化 端口B工作在方式0 作开始、暂停的输入
;out 63h,al
mov dx,12h  ;计算时间常数
mov ax,34dch
div di
out 42h,al ;设置时间常数 并将记数值输入到2#通道
mov al,ah
out 42h,al
;MOV DX,61H
;in al,DX  ;PB1口为暂停键
;and al,00000001B
;jz read
delay:
mov cx,2801  ;延时;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 + -