实验三 音乐程序
实验目的:
1、掌握PC机发音原理及音乐程序编制方法。 2、8086指令: IN,OUT,DIV,OR 实验内容:
一、发音程序。
1、用DEBUG输入下列程序:
MOV DX,4000H IN AL,61H AND AL,FCH
LOP: XOR AL,02H
OUT 61H,AL MOV CX,0140H
DEY: LOOP LOP
DEC DX JNE LOP INT 21H INT 20H
2、在DEBUG下运行此程序,改变延时时间常数,注意声音高低变化。 二、音乐程序。
1、输入,汇编,连接并运行下列程序: stacksg segment para stack
dw 32 dup(?)
stacksg ends datasg segment tiger db 0ah,0dh,'two tiger。$' tig_freq dw 2 dup(262,294,330,262)
dw 2 dup(330,349,392) dw 2 dup(392,440,392,349,330,262) dw 2 dup(294,196,262),0ffffh
tig_time dw 10 dup(25),50,25,25,50
dw 2 dup(12,12,12,12,25,25) dw 2 dup(25,25,50)
datasg ends codesg segment
assume cs:codesg,ds:datasg,ss:stacksg
start: mov ax,datasg
mov ds,ax lea dx,tiger mov ah,9 int 21h
lea si,tig_freq lea bp,ds:tig_time
5
call play mov ah,4ch int 21h
play proc freq: mov di,[si]
cmp di,0ffffh je end_ply mov bx,ds:[bp] call sound add si,2 add bp,2 jmp freq
end_ply: ret play endp sound proc
mov al,0b6h out 43h,al mov dx,14h mov ax,4f38h div di out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,al
wait: mov cx,5000 spkr_on: loop spkr_on
dec bx jnz wait mov al,ah out 61h,al ret
sound endp codesg ends
end start
2、修改程序,使它能演奏一首你所喜爱的歌曲。 3、若歌曲中有休止符,怎么办? 实验报告:
1、实验记录和体会。 2、自编程序。
6
实验四 键盘和窗口程序
实验目的:
1、掌握利用INT 16H 2号功能调用实行键盘输入的方法。 2、熟悉键盘的扫描码和ASCII码的关系。
3、掌握利用INT 10H功能调用实现窗口功能的方法。 实验内容:
一、键盘输入程序
1、程序:
PRO_NAM AGAIN: BINIHEX ROTATE: PRINT:
SEGMENT
ASSUME CS:PRO_NAM ORG 100H
MOV AH,0
INT 16H MOV BX,AX CALL BINIHEX MOV AH,2 MOV dl,20h INT 21H MOV DL,BL MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H JMP AGAIN INT 20H
PROC NEAR
MOV CH,4
MOV CL,4
ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL PRINT ADD AL,7
MOV DL,AL
MOV AH,2 INT 21H DEC CH
7
JNZ ROTATE RET
BINIHEX ENDP PRO_NAM ENDS
END AGAIN
2、输入,汇编,连接此程序,并将它转变成。COM文件。
3、运行此程序,观察并记录各个键的扫描码,ASCII码及对应字符。 二、窗口程序:
1、程序: code segment
assume cs:code,ss:code org 100h
start: mov ax,600h
mov cx,0 mov dx,184fh mov bh,7 int 10h
pos: mov ah,2
mov dx,101eh mov bh,0 int 10h mov cx,20
get: mov ah,1
int 21h cmp al,1bh jz exit loop get mov ax,601h mov cx,81eh mov dx,1031h mov bh,7 int 10h jmp pos
exit: int 20h code ends
end start
2、将此程序输入并转变成。COM文件。
3、运行此程序,观察按不同键所产生的效果。 4、此程序所产生的窗口效果有何缺陷?试修改之。 实验报告: 1、实验记录。 2、自编程序。
8
实验五 活动图形显示程序
实验目的:
1、掌握利用INT 10H实现活动图形的方法。 2、INT 10H 的 2号,6号,0AH号功能。 实验内容:
参考下列程序自编一活动的复合图形显示程序。 程序一 活动字符图形显示程序:
stack segment stack
db 256 dup(0)
stack ends code segment
assumecs: code,ss:stack
move: mov cx,0
mov dx,184fh mov bh,7 mov ax,0618h int 10h mov dx,0 mov cx,1 mov bh,0
rept: mov ah,2
int 10h mov ah,10 mov al,0fh int 10h call dely mov al,20h mov ah,10 int 10h inc dh inc dl inc dl cmp dh,25 jne rept mov ah,4ch int 21h
dely proc
push cx push dx mov cx,5
lop: mov dx,0 lop1: dec dx
jne lop1 loop lop
9