《微机原理与接口技术课程设计太原理工大学.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课程设计太原理工大学.docx(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微机原理课程设计学校: 学院:设计题目: 专业班级:姓名:学号:太原理工大学信息工程学院国际象棋棋盘绘制程序自动化 07-01 班一课程设计的题目:国际象棋棋盘绘制程序二程序功能简述本程序在屏幕上左侧绘制一个红黑相间的国际象棋棋盘,右侧绘制一个汉字棋,棋字的四个角有角框。显示完后,按 q 退出。运行本程序后,从屏幕左上角开头,棋盘的奇数行位置逐行消灭彼此相间 15 个像素宽的红色块虚的,共消灭五行,每行五个红色块,然后从第一行的第一个色块的右下角开头,在棋盘的偶数行位置逐行消灭彼此相间 15 个像素宽的红色块虚的,每行四块,共四行。其中红色块由 8X8 个彼此相间一个像素的红点组成,前一个色块
2、和后一个色块之间有肯定的显示时间间隔。然后,屏幕的右侧会按棋的笔画挨次,一笔一画的显示汉字棋,其中前一笔和后一笔之间有肯定的显示时间间隔。然后按先横后竖的挨次,在棋字的四个角的斜上方显示四个角框。笔画同样有时间间隔。显示完后,假设在键盘上输入 q,则程序退出。三主要设计思想简述本程序主要通过调用 10H 号 BIOS 中断的 0CH 号功能点调用来显示图像。将要显示点的坐标(line, cow)分别传送到 dx,cx,然后将点的颜色代码传送 al,接着调用 10H 号 BIOS 中断的 0CH 号功能,一个点就显示出来。显示矩形块以及笔画(横,竖,撇,捺)是先确定第一个点的坐标后, 然后让点的
3、行坐标 line,列坐标 cow 按某种方式循环,每次循环后调用 10H 号 BIOS 中断的 0CH 号功能来完成点的显示。全部循环完后,这些点的排列就是要显示的矩形块或笔画。所以,点的行坐标 line,列坐标 cow 的循环方式就打算了要显示的图像。显示矩形块虚的的循环方式是:line,cow 都循环,line 在外层,循环一次加 2,cow 在内层,循环一次加 2,line 循环的次数打算了方块的高,cow 循环的次数打算了方块的宽。笔画横的循环方式是: 只 cow 循环,循环一次加 1,循环的次数打算了笔画横的长度。笔画竖的循环方式是:只 line 循环,循环一次加101,循环的次数打
4、算了笔画竖的长度。笔画撇的循环方式是: line,cow 都循环, 在同一层。循环一次 line 加 1, cow 减 1。循环的次数打算了笔画撇的长度笔画捺的循环方式是:line,cow 都循环,在同一层。循环一次 line 加 1,cow 加1。循环的次数打算了笔画捺的长度。第一个点的坐标,循环方式,循环的次数打算了要显示的图形的位置,外形,尺寸。将位置不同的矩形块虚的依据棋盘的几何构造显示出来,就构成了棋盘。将位置,长度不同的笔画(横,竖,撇,捺)依据棋字的几何构造显示出来,就构成了棋字。边框同理。三程序流程图。四源程序代码DATASEGMENTLINEDW0;矩形块左上角的行ROWDW
5、0;矩形块左上角的列PIXDB10;矩形块的颜色NDW?;文字笔画的长度PIX_ADB11;文字笔画的颜色DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:;主程序MOV AX , DATA MOV DS , AX MOV AH , 0 MOV AL , 4INT 10H;设置 320200 彩色图形方式mov ah,0bh mov bh,01 mov bl,0 int 10hKUAIMACROR,L,N;定义显示矩形块阵列宏LOCALLA,LBMOVROW,R MOVLINE,Lmov di,NLA:MOV CX, NLB:CALL DISP_REC
6、Tcall delay ADDrow, 30 LOOP LBMOVROW, Raddline,30DECDIJNZLA ENDMHONG1 MACRO L,R,NUM,CHEN ;定义显示笔画宏MOV LINE,LMOV ROW,R MOV N,NUM CALL CHENCALL delay1 ENDMKUAI0,0,5;显示棋盘奇数行KUAI15,15,4;显示棋盘偶数行HONG130,165,21,HENG;显示棋字HONG1 HONG1 HONG1 HONG1HONG115,176,60,SHU31,175,10,PIAN32,178,5,NA30,191,30,HENG15,196,4
7、5,SHUHONG1HONG115,214,45,SHU40,196,19,HENGHONG150,196,19,HENG HONG160,191,30,HENG HONG163,200,10,PIAN HONG163,210,12,NAHONG110,160,5,HENG;显示角框HONG110,160,5,SHUHONG110,223,5,HENG HONG110,228,5,SHU HONG180,160,5,HENG HONG175,160,5,SHU HONG180,223,5,HENG HONG175,228,6,SHUL5:DISP_RECTmovah,8;按 q 返回 DOS
8、int21hcmpal,”q”JNEL5 MOV AH , 4CH INT 21HPROCnear PUSH AX PUSH CX PUSH DX PUSH SI PUSH DIMOV AH , 0CH;指明写点调用MOV AL , PIX;取点的颜色DISP_2:MOV DI , 8MOV DX , LINE MOV SI , 8;用于掌握行显示循环;取点的行坐标;掌握列显示循环DISP_1:MOV CX , ROW INT 10HINC CXinc cx DEC SI;取显示点的列坐标;完成点的显示;列坐标加 2JNZ DISP_1 INC DXinc dx DEC DIJNZ DISP_
9、2;循环显示完一行;行坐标加 2;循环显示完 8 行POP DI POP SI POP DX POP CXPOP AXDISP_RECTRETENDPDELAYPROC NEAR PUSH CX;延时子程序D11:PUSH DXMOV DX,2500 MOV CX,25000D12:LOOP D12DECDXJNZD11POPDXPOPCX RETDELAYENDPDELAY1PROC NEAR;延时子程序 1 PUSH CXPUSH DX MOV DX,10000D11A: D12A:DELAY1 HENGMOV CX,25000 LOOP D12A DECDXJNZD11APOPDXPOP
10、CX RETENDPPROCnear PUSH AX PUSH CX PUSH DX;笔画横的子程序PUSH SI PUSH DIMOV AH , 0CH;指明写点调用DISP_3:MOV AL , PIX_A MOV DX , LINE MOV SI , N MOV CX , ROWINT 10H;取点的颜色;取点的行坐标;掌握列显示循环;取显示点的列坐标;完成点的显示inc cxDEC SI;列坐标加 1行不变HENGJNZ DISP_3;循环显示完一行POP DIPOP SI POP DX POP CX POP AX RETENDPSHUDISP_4:PROCnear PUSH AX P
11、USH CX PUSH DX PUSH SI PUSH DIMOV AH , 0CH MOV AL , PIX_A MOV DI , N MOV DX , LINE MOV CX , ROW INT 10Hinc DX DEC DI JNZ DISP_4 POP DI POP SIPOP DX POP CX POP AX RET;笔画竖的子程序;指明写点调用;取点的颜色;用于掌握行显示循环;取点的行坐标;取显示点的列坐标;完成点的显示;行坐标加 1列不变;循环显示完一列SHUENDPPIANPROCnear;笔画撇的子程序PUSH AXPUSH CX PUSH DX PUSH SI PUSH
12、DIDISP_5:PIANNAMOV AH , 0CH MOV AL , PIX_A MOV DI , N MOV DX , LINE MOV CX , ROW INT 10HDEC cx inc DX DEC DIJNZ DISP_5 POP DI POP SIPOP DX POP CX POP AX RET ENDPPROCnear PUSH AX PUSH CX PUSH DX;指明写点调用;取点的颜色;用于掌握撇的长度;取点的行坐标;取显示点的列坐标;完成点的显示;列坐标减 1;行坐标加 1;笔画捺的子程序PUSH SI PUSH DIMOV AH , 0CH;指明写点调用DISP_6
13、:MOV AL , PIX_A MOV DI , N MOV DX , LINE MOV CX , ROWINT 10H;取点的颜色;用于掌握显示循环;取点的行坐标;取显示点的列坐标;完成点的显示INC cx inc DX DEC DIJNZ DISP_6POP DI;列坐标加 1;行坐标加 1POP SI POP DX POP CX POP AXRETNAENDPCODEENDSENDSTART五总结报告课程设计中所遇到的主要问题和解决方法。首先遇到的问题是程序的调试,我把程序写好并检查后没觉察错误,然后上机汇编却觉察 5 个警告错误,看错误类型号,都是英语,看不懂,幸好课本后部附录里有翻译
14、,这个问题解决了,但我还是不知道错误的那几行哪里错,看起来很正确。最终。经过思考和急躁检查,最终解决了,原来其中一行把宏实参 0 写成了O读欧,这一行的错误导致了其他行的错误。调试程序确实需要急躁,这个错误很简洁,但太隐蔽了,检查了 20 分钟,差点没抓狂。然后遇到的问题是画流程图,由于以前没画过,也不知道用什么软件,就去网上搜寻,于是觉察了 windows office 套件中的 Visio 。Visio 确实很好用,操作很简洁,简洁上手,画出的图很秀丽,流程图最终完成了。创和得意之处。这个程序是仿写的,但根本上只是借鉴了它的方法,95%的内容是重写的,增加 了很多东西和功能。我觉的自己的这
15、个程序比较起来还是简洁的,设计了两个宏和五个子程序来实现各种功能,然后在主程序中调用。代码看起来比较整齐,条理,假设要显示别的图像,只要在主程序中改一下宏的参数就可以了。课程设计中存在的缺乏,需要进一步改进的设想。这个程序还是不够精练,五个图形子程序有很多相像的地方,功能区分不大,加上些推断,应当可以合并成一个子程序,两个延时子程序除了参数,其实是一个子程序,也可以合并成一个子程序,这样用内存会少很多。课程设计的感想和心得体会。课程设计做完了,之前觉的很难,但做完以后,又感觉很简洁,最起码对我的这个程序来说。曾经的困惑现在已经成了学问,有一种成就感。可以说,我享受了一次微机原理课程设计。对此而言,前几天的辛苦和思考都是值得的。真期望这样的课程设计能多些。在课程设计中,感觉真正的学到了东西。以前书本上的学问得到融会贯穿,更加透彻的理解了学问间的联系。指令系统也更生疏了,看来学编程只有两种方法,看程序,写程序,先看后写。在课程设计中,第一次领悟到汇编语言的奇特。简洁,准确,效率,这就是汇编。汇编的简洁和对硬件的准确掌握给我留下很深的映象。实现同样的功能,用 c 的话编译出来或许得 30 条指令,但用汇编 5,6 条就解决了。写汇编程序时似乎可以看到 cpu 在如何工作。最终理解了学微机原理为什么要学汇编了。
限制150内