最近在研究汇编声音的程序,遇到8253 8255编程,有程序,谁给我注释一下 ,最好每个语句都有

来源:百度知道 编辑:UC知道 时间:2024/05/27 04:59:23
最近在研究汇编声音的程序,遇到8253 8255编程,有程序,谁给我注释一下 ,最好每个语句都有
;下面是sound.asm通用发声程序
public soundf
cseg segment para'code'
assume cs:cseg
soundf proc far
push ax
push bx
push cx
push dx
push di
;。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
mov al,0b6h
out 43h,al
mov dx,12h
mov ax,348ch
div di
out 42h,al
mov al,ah
out 42h,al
in al,61h
mov ah,al
or al,3
out 61h,al
wait1: mov cx,4815
;。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
call waitf
delay: loop delay
dec bx
jnz wait1
mov al,ah
out 61h,al
pop di
pop dx
pop cx
pop bx
pop ax
ret
soundf endp

waitf proc near
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
cseg ends
end

特别是作标记的那段,每个数据的由来和用途,越详细越好

;下面是sound.asm通用发声程序
public soundf
cseg segment para'code'
assume cs:cseg
soundf proc far
push ax
push bx
push cx
push dx
push di
;将8255初始化为10110110B,即A口工作在方式1输入,C口上半部分输出,B口工作在方式1输入,C口下半部分输出
mov al,0b6h
out 43h,al
;用348CH除以12H
mov dx,12h
mov ax,348ch
div di
;将商从B口输出
out 42h,al
mov al,ah
out 42h,al
;将A口的最低2位置1
in al,61h
mov ah,al
or al,3
out 61h,al
;双循环等待,实现延迟
wait1: mov cx,4815
call waitf
delay: loop delay
dec bx
jnz wait1
;然后将A口的最低2位恢复成原有值
mov al,ah
out 61h,al
pop di
pop dx
pop cx
pop bx
pop ax
ret
soundf endp

waitf proc near
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
cseg ends
end