汇编课程设计报告
学生所在学院: 燕山大学信息学院
学生所在班级: _
学 生 姓 名:________ ___
____
指 导 教 师:
课程设计(一)
一、设计题目:2 号乐曲程序
二、设计要求:利用定时器产生声音的方法编写程序,使 PC 机
奏出《两只老虎》的乐曲。
三、设计原理:
1.乐谱中的每个音符有音高和音长两种属性,按照乐谱把每个音符的
频率和节拍定义成两个数据表,程序从频率表中取出一个音符的频率值,
以产生一定音高的声音,同时取出相应的节拍计数值控制这一频率的声音
延长的时间。
2.每个音符的频率值 Freq 经过转化后送入定时器的 42H 端口,以产
生相应频率的脉冲。转换的公式为:533H*896/Freq=123280H/freq
3.节拍时间表中存放的计数值是音长的 1/10,如 2 拍的音长定为 0.5
秒,对应的计数值应为 50;一拍的音长是 0.25 秒,对应的计数值应为 25.
然后控制 100p 指令反复执行 2801*n 次来取得音符的延长时间(n 为音长所
对应的计数值)
4.乐曲演奏完后,同样要完成对 61H 端口的复位操作以避免死机。
四、程序设计:
MY8254_COUNT0 EQU 0E440H
MY8254_COUNT1 EQU 0E441H
MY8254_COUNT2 EQU 0E442H
EQU 0E443H
MY8254_MODE
DATA SEGMENT
FREQ_TABLE 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),-1
TIME_TABLE DW 8 DUP(8)
DW 2 DUP(8,8,16)
DW 2 DUP(6,2,6,2,8,8)
DW 2 DUP(8,8,16)
STITLE DB 'NOW LET US PLAY:TWO TIGERS',0DH,0AH,'$'
SIGN1 DB '1 ','$'
SIGN2 DB '2 ','$'
SIGN3 DB '3 ','$'
SIGN4 DB '4 ','$'
SIGN5 DB '5 ','$'
SIGN6 DB '6 ','$'
SIGN7 DB '5. ','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
FREQ:
MOV AX,DATA
MOV DS,AX
LEA SI,FREQ_TABLE
LEA BP,DS:TIME_TABLE
MOV AH,09H
MOV DX,OFFSET STITLE
INT 21H
MOV DI,[SI]
CMP DI,-1
JE EXIT
MOV AH,09H
MOV BX,DS:[BP]
CMP DI,262
JNZ SIGN_2
MOV DX,OFFSET SIGN1
INT 21H
SIGN_2:
CMP DI,294
JNZ SIGN_3
MOV DX,OFFSET SIGN2
INT 21H
CMP DI,330
JNZ SIGN_4
MOV DX,OFFSET SIGN3
INT 21H
CMP DI,349
JNZ SIGN_5
MOV DX,OFFSET SIGN4
INT 21H
CMP DI,392
JNZ SIGN_6
MOV DX,OFFSET SIGN5
INT 21H
CMP DI,440
JNZ SIGN_7
MOV DX,OFFSET SIGN6
INT 21H
CMP DI,196
JNZ SIGN_8
MOV DX,OFFSET SIGN7
INT 21H
SIGN_3:
SIGN_4:
SIGN_5:
SIGN_6:
SIGN_7:
SIGN_8:
CALL DO_SOUND
ADD SI,2
ADD BP,2
JMP FREQ
EXIT:
MOV AH,4CH
INT 21H
DO_SOUND PROC NEAR
PUSH AX
PUSH BX
PUSH DX
PUSH DI
MOV DX,MY8254_MODE
MOV AL,36H
OUT DX,AL
MOV DX,0FH
MOV AX,4240H
DIV DI
MOV DX,MY8254_COUNT0
OUT DX,AL
MOV AL,AH
OUT DX,AL
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL
CALL DELAY
MOV AL,AH
OUT 61H,AL
POP DI
POP DX
POP BX
POP AX
RET
DO_SOUND ENDP
DELAY PROC NEAR
PUSH AX
START1:
MOV CX,2801
START2:
IN AL,61H
AND AL,10H
CMP AL,AH
JE START2
MOV AH,AL
LOOP START2
DEC BX
JNZ START1
POP AX
RET
DELAY ENDP
CODE ENDS
END START
五、运行结果
编译并连接程序,打开实验箱,运行程序,演奏出两只老虎乐曲。
课程设计(二)
一、设计题目:光标轨迹程序 drawb
二、设计要求:程序能在屏幕上画出光标移动的轨迹,画城墙、水平线
等图,光标的移动受键盘上光标键的控制,如果键入 escape 键,则程序结
束,返回 dos
三、设计原理:
1:本科设使用的是图形方式利用像素来生成彩色图形
2:使用了描绘像素点的 BIOS 功能,写像素点所需要的调用参数行变量和
列变量分别保留在 DX 和 CX 寄存器中,一开始先把 DX 和 CX 置在屏幕的中
央,当按动一个光标控制键时,寄存器 DX 和 CX 中的值会改变,当按动↑
键时,DX 的值减 1,当按动↓键时,DX 的值加 1,当按动←键时,CX 减 1,
当按动→键时,CX 加 1,这样由 CX 和 DX 的值决定了写点的坐标位置。写
点的彩色值(像素值)由数字键 0-3 决定,其 0-3 的值保留在 BL 中,在调
用写点功能时,再传送给 AL。在光标控制键的指引下,我们可以画出任何
我们想画的图形。
四、程序设计:
EQU 48H
UP
EQU 50H
DOWN
LEFT
EQU 4BH
RIGHT EQU 4DH
ESC
EQU 1BH
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE;,DS:DATA
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AH,6
MOV AL,0
MOV CX,0
MOV DL,79
MOV DH,24
INT 10H
MOV AH,0
MOV AL,04H
INT 10H
MOV AH,0BH
MOV BH,0
MOV BL,0H
INT 10H
MOV AH,0BH
MOV BH,1
MOV BL,0
INT 10H
MOV DX,100D
MOV CX,160D
GET_CHAR:MOV AH,0
INT 16H
CMP AL,35H
JZ CHANGE1
CMP AL,34H
JZ CHANGE0
CMP AL,ESC
JZ EXIT
CMP AL,33H
JG PLOT
CMP AL,30H
JL PLOT
MOV BL,AL
AND BL,03
JMP GET_CHAR
PLOT:MOV AL,AH
CMP AL,UP