微机原理课程设计素材1Word格式.docx
《微机原理课程设计素材1Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计素材1Word格式.docx(34页珍藏版)》请在冰点文库上搜索。
第二个字节相加
ADCAL,[DI+1]
DAA
MOV[BX+1],AL
MOVAL,[SI+2]
ADCAL,[DI+2]
MOV[BX+2],AL
MOVAL,[SI+3]
ADCAL,[DI+3]
MOV[BX+3],AL
MOVDL,00;
最高位字节有进位则显示"
01"
ADCDL,00
CALLDISPSUM
MOVAH,4CH;
返回DOS
INT21H
DISPSUMPROCNEAR;
结果显示子程序
PUSHAX
PUSHBX
PUSHCX
PUSHSI
MOVSI,4
PUSHDX
MOVCX,5
LAB:
MOVAL,DL
MOVBL,DL
MOVCL,4;
显示高位字节
SHRAL,CL
ADDAL,30H
MOVAH,02
MOVDL,AL
INT21H;
显示一位字符
ANDBL,0FH;
显示低位字节
ADDBL,30H
MOVDL,BL
POPBX
POPCX
DECSI
MOVDL,[BX][SI];
结果显示
LOOPLAB
POPDX
POPSI
POPAX
RET
DISPSUMENDP
CODEENDS
ENDSTART
2.有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。
编程要求及提示:
[1]参加排序的数据及个数由学生自己定义。
[2]要将排序前的数组和排序后的数组在屏幕上显示出来。
[3]实验步骤同内容一。
见图2.
程序如下:
STACKSEGMENTSTACK
DB256DUP(?
DATA1DW4031H,3859H,0245H,1111H,0A231H,0FFFFH
STRING1DB'
Originalnumbers:
'
0DH,0AH,'
$'
STRING2DB'
Thenumbersfromlargetosmall:
MOVAX,STACK
MOVSS,AX
LEADX,STRING1;
显示人机交互提示
MOVAH,09H
MOVCX,6
LEASI,DATA1;
显示初始数据
L1:
MOVAX,[SI]
ADDSI,2
CALLDISPAX
CALLDISPCR
LOOPL1
MOVCX,5
LEASI,DATA1
ADDSI,10;
指针指向最后一个数据
LP1:
PUSHSI
LP2:
MOVAX,[SI];
数据排序
CMPAX,[SI-2]
JBENOXCHG
XCHGAX,[SI-2];
交换操作
MOV[SI],AX
NOXCHG:
DECSI;
不需排序时继续
DECSI
LOOPLP2
POPSI
POPCX
LOOPLP1
LEADX,STRING2;
显示字符串
MOVCX,6;
显示排好序后数据
L2:
LOOPL2
MOVAH,4CH
INT21H
DISPALPROC;
显示AL内容子程序
PUSHAX
PUSHCX
PUSHDX
MOVCL,4;
处理高位十六进制数
SHRAL,CL
CALLCHANG
MOVAH,02H
MOVDL,AL
INT21H;
POPAX
ANDAX,0FH;
处理低位十六进制数
POPDX
POPAX
RET
DISPALENDP
CHANGPROC;
十六进制数转换为ASCII码
CMPAL,10
JNGECHANG1
ADDAL,7
CHANG1:
CHANGENDP
DISPAXPROC;
显示AX内容子程序
XCHGAL,AH
CALLDISPAL
XCHGAH,AL
DISPAXENDP
DISPCRPROC;
回车换行子程序
MOVAH,2
MOVDL,0AH
MOVDL,0DH
DISPCRENDP
ENDSTART
3.编写建立、写入、读出磁盘文件的程序要求:
(1)设计一个包括:
建立文件、写入文件、读出文件的主菜单。
(2)能用输入的文件名,在磁盘建立文件。
(3)向已有文件中写入数据。
(4)读出已有文件的内容(ascii码或16进制数)。
下面是我的一篇文件操作代码,你修一下就可以用了。
includekcsj.mac
.modelsmall
.386
.stack200h
publicprog1
.data
menudb30dup('
'
),'
1.Displaytextfile'
0ah,0dh
db30dup('
2.Copytextfile'
3.Deletetextfile'
4.Theend'
Pleaseselectone(1~4):
'
prompt1db0ah,0dh,'
Filename:
prompt2db0ah,0dh,'
Linesofpage(1~25):
FNAMEdb15,?
15dup('
);
存放文件名的缓冲区
out1db0ah,0dh,'
Cannotopenfile!
out2db0ah,0dh,'
Cannotreadfile!
out3db0ah,0dh,'
Cannotcreatfile!
out4db0ah,0dh,'
Cannotwritefile!
out5db0ah,0dh,'
Cannotdeletefile!
out6db0ah,0dh,'
Thefilehasbeencopyed!
out7db0ah,0dh,'
Thefilehasbeendeleted!
bufferdb?
endcodedb0;
错误标志
end1db0;
结束标志
code1dw?
;
原文件的代号
code2dw?
新建文件的代号
signdb0
ask1db0ah,0dh,'
Inputsourcefilename:
ask2db0ah,0dh,'
Inputdestfilename:
rowdb23
infodb'
PressESCtoquit,ptochangepage,anykeytocontinue!
.code
prog1procfar
init
callmainshow
L1:
movah,1
int21h
cmpal,'
1'
jedisplay
2'
jecopy
3'
jedelete
jmprtn1
display:
callfdisp
movend1,0
mov[row],23
movendcode,0
jmpL1
copy:
callfcopy
movsign,0
delete:
callfdel
rtn1:
ret
prog1endp
mainshowprocnear
scroll0
cursor10,0
strdispmenu
mainshowendp
fdispprocnear;
分页显示
strdispprompt1
callfopen
scroll0;
清屏
cursor0,0;
置光标
cmpendcode,1
jnecont
movah,7
jmpext0
cont:
movbx,code1
callfread
jeext1
callfshow;
显示
cmpend1,1
jmpcont
ext1:
movah,3eh;
关闭文件
movbx,code1
ext0:
movendcode,0
ret
fdispendp
fopenprocnear;
打开文件
callin_name
movah,3dh
moval,0
jncnext
movendcode,1
strdispout1
next:
movbx,ax
movcode1,ax
fopenendp
in_nameprocnear;
输入文件名
leadx,FNAME
movah,0ah
int21h
leabx,FNAME+2
movah,0
moval,FNAME+1
addbx,ax
movbyteptr[bx],0
adddx,2
in_nameendp
freadprocnear;
读取文件
movah,3fh
movcx,1
leadx,buffer
jncpast
strdispout2
jmpexit
past:
cmpax,0
jeexit
exit:
movah,3eh
freadendp
fshowprocnear;
显示文件
movdl,[buffer]
movah,2
movah,3
movbh,0
int10h
cmpdh,[row]
jaed1
d1:
strdispinfo
d2:
movah,7
cmpal,0
jzd2
cmpal,1bh;
按ESC退出
jzd4;
退出关闭文件endcode=1
cmpal,70h;
按P提示输入每页行数
jnzd3
strdispprompt2
callchtonum
mov[row],al
d3:
cursor0,0
d4:
movend1,1
fshowendp
chtonumprocnear
movbx,0
newchar:
movah,1;
输入数字并转换为十进制
subal,30h
jlgoon
cmpal,9
jggoon
cbw
xchgax,bx
movcx,10d
mulcx
addbx,ax
jmpnewchar
goon:
moval,bl;
行数传给AL
chtonumendp
fcopyprocnear;
文件拷贝
cursor0,0
strdispask2
callfcreat
cmpendcode,1
jeover
movcode2,ax
strdispask1
callfopen
jeetn0
again:
callfread
jeetn0
movsign,1
pushbx
cmpax,0
jenext2
movcx,ax
movbx,code2
movah,40h
popbx
jncagain
strdispout4
next2:
etn0:
cmpsign,1
jneover
strdispout6
over:
fcopyendp
fcreatprocnear;
创建文件
movah,3ch
movcx,00
jncnext1
strdispout3
next1:
fcreatendp
fdelprocnear;
删除文件
strdispprompt1
callin_name
movah,41h
jnzquit
strdispout5
quit:
strdispout7
fdelendp
endprog1
4.运行符合题目要求,按“q”键退出。
;
按字母“S”画一个用不同颜色填充的三角形;
按字母“Z”画一个用不同颜色填充且带有边框图案的矩形;
datasegment
info1db0dh,0ah,'
pleasechoosetheletterS,Z,q:
db0dh,0ah,'
(inputqtoquit)$'
x1dw140
y1dw60
x2dw500
y2dw400
colordw0c07h
dataends
stacksegmentstack
db200dup(0)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
mainprocfar
movax,data
movds,ax
movax,12h
int10h
input:
leadx,info1
movah,9
int21h
@in:
movah,0
int16h
cmpah,10h;
按键码'
q'
和"
Q"
jzexit
cmpah,1fh;
s'
S"
jzsa
cmpah,2ch;
z'
Z"
jnz@in
zhen:
callzheng
callfill
jmpexit
sa:
callsan
movah,1
movah,4ch
ret
mainendp
画三角块
sanprocnear
moval,1
a0:
movdx,1
movbp,1
movcx,320
a1:
pushcx
pushbp
a2:
movah,12
pushax
popax
inccx
subbp,1
jnza2
popbp
addbp,2
popcx
incdx
cmpdx,20
jbeQ1
incal
Q1:
cmpdx,40
jbeQ2
Q2:
deccx
jnea1
sanendp
zhengprocnear
******画矩形******
movcx,x1
movdx,y1
movsi,x2
movdi,y2
cmpcx,si
jbeQ3
xchgcx,si
movx1,cx
movx2,si
Q3:
cmpdx,di
jbeQ5
xchgdx,di
movy1,dx
movy2,di
Q5:
画矩形边框
PUSHDX
PUSHCX
@31C:
MOVAX,color
INT10H
INCCX
CMPCX,SI
JNZ@31C
@326:
INT10H
INCDX
CMPDX,DI
JNZ@326
POPSI
@32E:
DECCX
JNZ@32E
POPDI
@339:
DECDX
JNZ@339
fill:
movax,0c01h
movcolor,ax
incx1
incy1
decx2
decy2
movbp,y2
movdi,bp
shrdi,1
callCol
inccolor
adddi,100
movax,0c04h
ret
填充色块
Col:
_31C:
JNZ_31C
cmpdx,di
jbeCol
zhengendp
codeends
endmain
微机接口课程设计
实验报告
计算机31班
秦鹏程
03055014
实验一
电子琴
一、实验目的
通过D/A转换器产生模拟信号,使PC机作为简易电子琴
了解利用数模转换器产生音乐的基本方法
二、实验内容
实验电路如图所示,8253的CLK0接1MHz时钟,GATE0接+5V,OUT0接8255的PA0,J1接喇叭,编程使计算机的数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音阶。
三、编程提示
1.对于一个特定的D/A转换接口电路,CPU执行一条输出指令将数据送入D/A,即可在其输出端得到一定的电压输出,给D/A转换器输入按正弦规律变化的数据,在其输出端即可产生正弦波,对于音乐,每个音阶都有确定的频率。
各个音阶标称频率值:
音阶
频率:
(单位Hz)