微机原理课程设计显示图形变换文档格式.docx
- 文档编号:17234746
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:29
- 大小:196.92KB
微机原理课程设计显示图形变换文档格式.docx
《微机原理课程设计显示图形变换文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计显示图形变换文档格式.docx(29页珍藏版)》请在冰豆网上搜索。
键盘
0BH
异步通信串行口1中断
17H
打印机
0CH
异步通信串行口0中断
18H
驻留BIOS
0DH
硬盘中断
19H
引导装入程序
不仅如此,在了解了常用BIOS中断类型后,还必须学习如何用BIOS功能调用编写显示程序。
INT10H提供了两种图形方式下读写像素的功能:
AH=0CH,写像素。
输入参数:
DX=像素行。
CX=像素列。
BX=显示页号。
AL=像素颜色值。
返回结果:
无。
AH=ODH,读像素。
AL=像素颜色值。
使用读写像素功能时注意,像素的行列坐标的值应取决于当前显示模式。
三.设计方案
1.方案一
(1).设计分析
程序主流程图如图1所示:
图1程序主流程图
显示变色矩形程序流程图如图2所示:
图2变色矩形流程图
显示变色三角形程序流程图如图3所示:
图3变色三角形流程图
画圆程序流程图如图4所示:
图4画圆流程图
画圆程序是最难的一个,只能用离散的点来组成。
算法如下:
电脑屏幕是由X、Y坐标组成的二维平面,在屏幕中央位置取一点为圆心,这就是坐标轴的交点(O点),取半径适中,然后交X轴于A、C两点,如图5所示。
DE直线垂直于X轴,则有|AB|*|BC|=|BD|*|BE|。
编程序时,取A点为起点,逐步沿X轴正向移动,每次移动一个像素点,计算A点的位置坐标,然后让D、E点的纵坐标从零递增,直到刚符合上述等式,即取纵坐标的平方值大于等式左边的第一个值,所以要用两个循环嵌套才能实现此功能。
第一次运行后的结果截屏如图6所示。
图5算法实现原理图
图6第一次运行结果
由此产生一个严重的问题,就是D、E点取点时的第一个、第二个点离起点太远,最后两个点离终点太远。
所以必须做修改。
修改算法如下:
在第一段程序的基础上,再画一个圆,第二个圆与第一个圆唯一的不同之处就是起点不同,改为F点,依据同样的算法,沿Y移动,相应变换的就是另外两个点,当程序运行结束后,其实画的是两个圆,重叠后就是一个完整的圆。
最终运行结果如图9所示。
最后的程序代码在附录中。
(2).运行结果
变色三角形程序演示结果如图7所示
图7变色三角形演示结果
变色矩形演示结果如图8所示
图8变色矩形演示结果
画圆演示结果如图9所示
图9画圆演示结果
命令输入窗口如图10所示
图10命令输入窗口
2.方案二
方案二与方案一的不同在于画圆的程序,其程序如附录中所示。
方案一算法简单而创新,实现简洁而明了,且修改方便;
而方案二中程序冗长,且需调用许多子程序,算法复杂,不易修改。
所以相比较而言,方案一具有明显优势,最终选择方案一。
四.心得体会
此次课程设计可以说是受益匪浅,通过查阅了很多资料,了解了许多汇编程序的思想,扩展了自己的视野,不再仅仅局限于书本中几条简短的程序,而且更重要的是明白写程序的态度:
仔细谨慎,精益求精。
在编写此程序时,最头疼的是编写画圆程序,因为汇编语言没有开方算法,所以只能用点来组成圆,秉着学术至上的态度,我尽量使组成圆的点连续,这可是一个浩大的工程:
先是在网上下载了一个高手编的画圆程序,但程序很长,而且比较深,迫使我和组员共商简便方法,功夫不负有心人,经过漫长的摸索与不懈的努力,我们得出了新算法,并编写出了更加简便的程序,经过一次次的调试,最终修成正果。
在此过程中,我不仅学到了书本中不具备的汇编语言的知识,更懂得了如何高效的与人合作,融入到团队之中,真的受益匪浅!
而且在设计中,把死板的课本知识变得生动有趣,激发了学习的积极性,把学过的计算机编译原理的知识强化,能够把课堂上学到的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
以前对于计算机操作系统的认识是模糊的,概念上的,现在通过自己亲自动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件的运行,对计算机编译原理的认识更加深刻。
课程设计中程序比较复杂,在调试时应该仔细,耐心,循序渐进,不要急于求成。
这样才能提高效率,保质保量地完成课程设计。
通过此次的微机原理课程设计,加深了我对课本知识的理解,使原本看似深奥的知识一下子变得简单而实用,提高了我发现问题,解决问题的能力,提高了我的动手能力与团队合作意识,收获颇丰!
参考文献
[1]《微机原理与接口技术》(基于16位机),2005.周佩玲等,电子工业出版社.
[2]《微型计算机原理与接口技术》,2004.姚燕南,高等教育出版社.
[3]《计算机硬件技术及应用基础.下册:
接口与应用》,2001.邹逢兴,国防科技大学出版社.
[4]《微型计算机接口技术及应用》,2000.刘乐善,华中科技大学出版社.
[5]《IBMPC汇编语言程序设计》,2001.沈美明、温冬婵,清华大学出版社.
附录
1.方案一程序:
datasegment
info1db0dh,0ah,'
pleasechoosetheletters,t,c:
'
db0dh,0ah,'
inputqtoquit'
'
$'
info2db0dh,0ah,'
chooseerror!
info3db0dh,0ah,'
pressanykeytocontinue'
qtoquit'
d3dw0
r=50;
圆的半径
x=300
y=240;
圆心坐标
numdw0;
数据暂存
yydw?
;
dataends
stacksegmentstack
db200dup(0)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack
mainprocfar
movax,data
movds,ax
movah,0
moval,4
int10h
input:
leadx,info1
movah,9
int21h
movah,08
cmpal,'
t'
jzsa
s'
jzzhen
c'
jzyua
q'
jzexit
movdx,offsetinfo2
movah,09
jmpinput
sa:
callsan
callcontinuse
zhen:
callzheng
yua:
callyuan
exit:
movah,4ch
ret
mainendp
sanprocnear
pushax
pushbx
pushcx
pushdx
moval,12h
moval,1
a0:
movdx,1
movd3,1
movcx,320
a1:
pushcx
pushd3
a2:
movah,12
popax
inccx
subd3,1
jnza2
popd3
addd3,2
popcx
incdx
deccx
cmpcx,20
jnea1
incal
cmpal,4
jnea0
popdx
popbx
sanendp
zhengprocnear
movah,0fh
moval,3
movcx,1;
字符数量
movah,2
movdh,5;
5行开始
movdl,25;
25列开始
calldly_qrtr;
调用延时子程序
*****光标向下动********
line:
movbl,0e0h;
字符黄色
incdh;
行增加
cmpdh,20;
20行
jneline
jmpline1
****光标向右动*****
line1:
字符为黄色
incdl;
列增加
cmpdl,55;
55列
jneline1
jmpline2
*****光标向上动*********
line2:
decdh
cmpdh,5
jneline2
jmpline3
***光标向左动***
line3:
decdl
cmpdl,25
jneline3
l00:
movah,7
moval,14
movbh,20h;
绿色
movch,6
movcl,26
movdh,19
movdl,54
calldly_qrtr;
l1:
movah,6
movbh,0f0h;
白色
l3:
movbh,40h;
红色
l005:
movbh,30h;
青
zhengendp
yuanprocnear
movbx,505fh
movax,4f02h
int10h;
显示模式
movsi,0
movcx,x-r;
行
movdx,y;
竖●起点坐标
moval,02
movah,0ch
movax,0
movdx,0
loop1:
incax;
inccx;
x坐标增一
pushax;
保护ax
movbx,100;
2r
subbx,ax;
2r-ax
mulbx;
(2r-ax)*ax
movbx,ax;
由bx保存
push0
movnum,0
loop2:
popax
incax;
ax++
pushax
incnum;
num++
mulax;
ax*ax
cmpax,bx;
比较大小
jbloop2;
小于跳转
pushnum
adddx,y
adddx,num
moval,02
movah,0ch
int10h
popnum
subdx,num
cmpcx,350
jbp
jmpnext
p:
jmploop1
next:
movdx,y-r;
列
movcx,x;
loop11:
incdx;
y坐标增一
movyy,dx
loop21:
jbloop21;
movcx,0
addcx,x
addcx,num
movdx,yy
subcx,num
cmpdx,290
jbq
callcontinuse
popdx
popcx
popbx
ret
jmp$
movah,4ch
;
q:
jmploop11
yuanendp
continuseprocnear
leadx,info3
jeexit1
exit1:
continuseendp
dly_qrtrprocnear;
延时子程序
pushdx
movdx,50000
d11:
movcx,8000
d12:
loopd12
decdx
jnzd11
dly_qrtrendp
codeends
endmain
2.方案二画圆程序
datassegment
colordw02
bkcolordw15
xdw280,
ydw240,
radiusdw150
datasends
stackssegment
dw100dup(0)
stacksends
codessegment
codes,ds:
datas,ss:
stacks
start:
movax,datas
movds,ax
movax,0a000h
moves,ax
movax,0012h
设置640*480*16图形模式
moval,2
callset_write_mode;
将写模式设为写模式2
again:
movax,bkcolor
callclear;
将背景清成白色
movax,wordptr[x]
pushax
movax,wordptr[y]
movax,wordptr[radius]
callcircle
movah,0
int16h
cmpal,0dh;
回车退出
cmpah,2eh;
key'
corc'
jnzskip
inccolor
skip:
jmpagain
quit:
movah,4ch
int21h
movax,4c00h
int21h
******************************************
640*480*16模式下的画点函数
pixelproc
pushbp
pushbx
pushcx
pushds
movbp,sp
movax,80
movbx,wordptr[bp+12];
bx<
=y
mulbx;
(dx:
ax)<
=80*y
movbx,ax;
movax,wordptr[bp+14];
ax<
--x
movcl,8;
||
divcl;
al<
=商(x/8),ah<
=余数(x%8)sp->
movcl,ah;
cl<
=ah|ds|<
-bp
movah,0;
|cx|<
-bp+2
addbx,ax;
bx(offset)<
=80*y+x/8|bx|<
-bp+4
moval,80h;
|bp|<
-bp+6
shral,cl;
al(mask)<
=(80h>
>
cl)|返回地址|<
-bp+8
pushax;
|color|<
-bp+10
movdx,3ceh;
|y|<
-bp+12
moval,8;
|x|<
-bp+14
outdx,al;
movdx,3cfh;
pixel堆栈结构
popax
outdx,al
moval,es:
[bx]
movax,wordptr[bp+10];
=color
movbyteptres:
[bx],al
popds
popcx
popbx
popbp
ret6
pixelendp
********************************
清屏函数
clearprocnear
movbx,0
clr1:
moves:
incbx
cmpbx,9600h;
80*480
jnbclr2
jmpclr1
clr2:
ret
clearendp
***************************************
bresenham算法实现的画圆函数
circleprocnear
subsp,6
movwordptr[bp-2],0;
x<
=0||
movax,wordptr[bp+4];
movwordptr[bp-4],ax;
y<
=rsp->
movax,0fffeh;
|p|<
-bp-6
imulwordptr[bp+4];
=radius*(-2)|y|<
-bp-4
addax,3;
=3-2*radius|x|<
-bp-2
movwordptr[bp-6],ax;
p=3-2*radius|bp|<
c0:
movax,wordptr[bp-2];
=x|返回地址|<
cmpax,wordptr[bp-4];
ifx<
y,jmpc00|radius|<
jlc00;
|yc|<
jmpc3;
|xc|<
c00:
pushwordptr[bp+8];
circle堆栈结构
pushwordptr[bp+6];
pushwordptr[bp-2]
pushwordptr[bp-4]
callcircle_point
cmpwordptr[bp-6],0
jgec1
movax,4
mulwordptr[bp-2]
addax,6
addax,wordptr[bp-6]
movwordptr[bp-6],ax
jmpc2
c1:
movax,wordptr[bp-2]
subax,wordptr[bp-4]
movbx,4
imulbx
addax,10
decwordptr[bp-4]
c2:
incwordptr[bp-2]
jmpc0
c3:
cmpax,wordptr[bp-4]
jnec4
pushwordptr[bp+8]
pushwordptr[bp+6]
c4:
movsp,bp
circleendp
circle_pointprocnear
subsp,16
addax,wordptr[bp+6];
movwordptr[bp-2],ax;
xc+x
sub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 显示 图形 变换
![提示](https://static.bdocx.com/images/bang_tan.gif)