微机设计.docx

上传人:b****8 文档编号:28783637 上传时间:2023-07-19 格式:DOCX 页数:17 大小:340.82KB
下载 相关 举报
微机设计.docx_第1页
第1页 / 共17页
微机设计.docx_第2页
第2页 / 共17页
微机设计.docx_第3页
第3页 / 共17页
微机设计.docx_第4页
第4页 / 共17页
微机设计.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

微机设计.docx

《微机设计.docx》由会员分享,可在线阅读,更多相关《微机设计.docx(17页珍藏版)》请在冰豆网上搜索。

微机设计.docx

微机设计

 

郑州航空工业管理学院

微机原理课程设计说明书

 

2007级

电气工程及其自动化专业

0706072班级

 

题目汽车小鸟动画

姓名学号

指导教师职称

二零一零年六月十一日

摘要:

随着计算机的快速发展,用汇编语言来实现动画更简单,直接和便捷,它的目标代码简短,占用内存较少,执行速度较快,是高效的程序设计语言。

本文主要对汽车小鸟动画进行程序设计,并通过masm软件进行运行,通过输入不同的数字对程序的控制,采用段内调用子程序的方法来实现,使用了堆栈技术和中断技术,来实现按下数字1,小鸟飞过,按2,汽车开过,按3,退出程序,同时对汇编语言的基本原理解析。

本程序可在windows2000,windowsxp上运行。

所需要的工具软件为MASM2.0及以上版本,先生成.asm文件,再生成.exe的文件,然后运行。

关键词:

汽车小鸟动画,masm软件,中断技术,堆栈,子程序调用

一、汽车小鸟动画的基本原理

此程序主要是利用BIOS功能调用的10H中断类型实现的。

先利用其功能设置显示方式为320*200彩色图形方式,由于程序中没有做好的汽车小鸟图形,需要先编写小鸟和汽车的字符图形的子程序,采用段内调用子程序的方法来实现,使用了堆栈技术。

设计两个画面,按1,小鸟飞过,按2,汽车开过,按3,退出程序。

二、设计方案

根据基本原理设计思路拟定出设计方案。

先编写好小鸟和汽车的图形显示的子程序,以供之后段内调用子程序。

之后再编写小鸟飞过的子程序和汽车开过的子程序,利用转移指令,调用子程序以及中断程序和堆栈等功能来实现设计的功能。

三、软件设计

3.1汽车小鸟动画总体结构图

 

程序流程图如下图所示

 

3.2编写汽车小鸟图形的子程序

BIRD  DB76H,10,0,0             ;小鸟的字符图形表

      DB0C4H,07,0,1

      DB76H,10,-2,2

      DB0C4H,07,0,1

      DB76H,10,-2,2

      DB0C4H,07,0,1

      DB76H,10,-2,2

      DB0C4H,07,0,1

      DB76H,10,2,-2

      DB0C4H,07,0,1

      DB76H,10,2,-2

      DB0C4H,07,0,1

      DB76H,10,2,-2

      DB0C4H,07,0,1

CAR   DB7                  ;汽车的字符图形表

      DB52H,7,0,0

      DB0B1H,7,0,1

      DB0DBH,7,0,1

      DB0DBH,7,0,1

      DB4FH,7,1,0

      DB4FH,7,0,-3

      DB2,7,-2,1

3.3编写小鸟飞过和汽车开过的子程序

(1)小鸟飞过的子程序:

DISP:

 CMPDL,80

      JAEexit1

      MOVAH,2              ;设置光标位置

      INT10H

      MOVAH,9              ;显示小鸟字符图形

      MOVAL,[DI]

      MOVBL,[DI+1]

      INT10H

      CALLDLY              ;延时

      MOVAH,9

      MOVAL,''

      MOVBL,04

      INT10H

      INCDL

      ADDDI,2

      DECSI

      JNZDISP

      JMPBEGIN

exit1:

RET

(2)汽车开过的子程序

QICHE PROCnear             ;汽车子程序

      PUSHAX

      PUSHBX

      PUSHCX

      PUSHDX    

      MOVAH,0

      MOVAL,4

      INT10H

      MOVAH,0BH           ;设置彩色组颜色为绿、红、黄

      MOVBH,01

      MOVBL,00

      INT10H

      CLEAR0,0,24,79,7    ;清屏宏调用

      LEADI,CAR           ;DI指向字符图形表

      MOVDH,5             ;从第5行5列位置开始显示汽车

      MOVDL,0

      CALLMOVE_SHAPE

      RET

3.4汽车小鸟动画程序

 运行可执行程序CAR.exe,选择1,小鸟飞过;选择2,汽车开过;选择3,退出。

DATA  SEGMENT

INFO1 DB0DH,0AH,'INPUT1,2,OR3:

(1:

bird,2:

car,3:

exit)$'

BUFA  DB200

      DB?

      DB200DUP(0)

BUFB  DB200DUP(?

BIRD  DB76H,10,0,0             ;小鸟的字符图形表

      DB0C4H,07,0,1

      DB76H,10,-2,2

      DB0C4H,07,0,1

      DB76H,10,-2,2

      DB0C4H,07,0,1

      DB76H,10,-2,2

      DB0C4H,07,0,1

      DB76H,10,2,-2

      DB0C4H,07,0,1

      DB76H,10,2,-2

      DB0C4H,07,0,1

      DB76H,10,2,-2

      DB0C4H,07,0,1

CAR   DB7                  ;小汽车的字符图形表

      DB52H,7,0,0

      DB0B1H,7,0,1

      DB0DBH,7,0,1

      DB0DBH,7,0,1

      DB4FH,7,1,0

      DB4FH,7,0,-3

      DB2,7,-2,1

      CHAR_CNTDW?

      POINTERDW?

      LINE_ONDB?

      COL_ONDB?

DATA  ENDS

STACK SEGMENTstack

      DB200DUP(0)

STACK ENDS

CODE  SEGMENT

      ASSUMECS:

CODE,DS:

DATA,SS:

STACK

 start:

movax,data

      movds,ax

      movah,0             ;设置显示方式为320*200彩色图形方式

      moval,4

      int10h

      leadx,info1         ;在显示器上显示字符串提示信息       

      movah,9

      int21h

      movah,0             ;从键盘读取字符到AL寄存器

      int16h

      CMPAL,31H           ;比较AL是否等于1

      JNE A

      CALLXIAO

  A:

 CMPAL,32H           ;比较AL是否等于2          

      JNE B

      CALLQICHE

  B:

 CMPAL,33H           ;比较AL是否等于3

      JNESTART

      MOVAH,4CH           ;终止当前程序并返回调用程序

      INT21H

CLEAR MACROpch,pcl,pdh,pdl,pbh;清屏宏定义

      MOVAH,0

      MOVAL,4

      INT10H

      MOVAH,6             ;调用6号功能

      MOVAL,0             ;设置整个屏幕为空白

      MOVCH,pch           

      MOVCL,pcl           ;窗口左上角(0行,0列)

      MOVDH,pdh

      MOVDL,pdl           ;窗口右下角(24行,79列)

      MOVBH,pbh           ;正常属性显示

      INT10H

ENDM

xiao  proc                   ;小鸟子程序

      PUSH DS

      MOVAX,0

      PUSHAX

      MOVAX,DATA

      MOVDS,AX

      MOVAH,0

      MOVAL,4

      INT10H

      MOVAH,0BH           ;设置背景色

      MOVBH,0

      MOVBL,1

      INT10H

      MOVAH,0BH           ;设置彩色组

      MOVBH,1

      MOVBL,1

      INT10H

      CLEAR0,0,24,79,7

      MOVAH,0FH           ;读当前显示状态

      INT10H

      MOVDH,10

      MOVDL,0

BEGIN:

MOVSI,2

      MOVCX,1

      LEADI,BIRD           ;DI指向小鸟字符表的首字母

DISP:

 CMPDL,80

      JAEexit1

      MOVAH,2              ;设置光标位置

      INT10H

      MOVAH,9              ;显示小鸟字符图形

      MOVAL,[DI]

      MOVBL,[DI+1]

      INT10H

      CALLDLY              ;延时

      MOVAH,9

      MOVAL,''

      MOVBL,04

      INT10H

      INCDL

      ADDDI,2

      DECSI

      JNZDISP

      JMPBEGIN

exit1:

RET

xiaoendp

DLYPROCNEAR               ;延时子程序

      PUSHCX

      PUSHDX

      MOV DX,10000

DL1:

  MOV CX,6801

DL2:

  LOOPDL2

      DEC DX

      JNZ DL1

      POP DX

      POP CX

      RET

DLY   ENDP

QICHE PROCnear             ;汽车子程序

      PUSHAX

      PUSHBX

      PUSHCX

      PUSHDX    

      MOVAH,0

      MOVAL,4

      INT10H

      MOVAH,0BH           ;设置彩色组颜色为绿、红、黄

      MOVBH,01

      MOVBL,00

      INT10H

      CLEAR0,0,24,79,7    ;清屏宏调用

      LEADI,CAR           ;DI指向字符图形表

      MOVDH,5             ;从第5行5列位置开始显示汽车

      MOVDL,0

      CALLMOVE_SHAPE

      RET

QICHE ENDP

MOVE_SHAPEPROCNEAR        

      PUSHAX

      PUSHBX

      PUSHCX

      PUSHDX

      PUSHDI

      MOVAH,0FH            ;取当前显示方式

      INT10H

      SUBCH,CH

      MOVCL,[DI]           ;CL放字符个数

      INCDI                ;DI指向字符图形表中的第一个字符

      MOVCHAR_CNT,CX

      MOVPOINTER,DI

      MOVLINE_ON,DH

      MOVCOL_ON,DL

PLOT_NEXT:

      ADDDH,[DI+2]         ;改变行列坐标

      ADDDL,[DI+3]

      CMPDL,80             ;出屏否?

      JBMOV_CRSR

      PopDI

      PopDX

      PopCX

      PopBX

      PopAX

      jmpexit2

MOV_CRSR:

 

      MOVAH,2              

      INT10H

      MOVAL,[DI]           ;取字符值

      MOVBL,[DI+1]         ;取字符属性

      PUSHCX

      MOVCX,1

      MOVAH,09             ;显示字符

      INT10H

      POPCX

      ADDDI,4              ;DI指向下一个字符

      LOOPPLOT_NEXT

      CALLDLY

      CALLERASE

      JMPSHORTPLOT_NEXT

exit2:

ret   

MOVE_SHAPEENDP

ERASE PROCNEAR

      MOVCX,CHAR_CNT

      MOVDI,POINTER

      MOVDH,LINE_ON

      MOVDL,COL_ON

ERASE_NEXT:

      ADDDH,[DI+2]

      ADDDL,[DI+3]

      MOVAH,2

      INT10H

      MOVAL,[DI]

      MOVBL,0

      PUSHCX

      MOVCX,1

      MOVAH,9

      INT10H

      POPCX

      ADDDI,4

      LOOPERASE_NEXT

      MOVCX,CHAR_CNT

      MOVDI,POINTER

      MOVDH,LINE_ON

      INCCOL_ON

      MOVDL,COL_ON

      RET

ERASE ENDP

CODEENDS

    ENDstart

调试与运行

1.打开MASM软件,对代码进行粘贴保存

2.运行程序

当按1时,小鸟飞过

当按2时,汽车开过

按3时,退出程序

四、结论

在调试程序时,要注意每一个小细节,如注释忘加分号,指令书写错误等问题,有时会运行不了,要仔细检查错误。

另外,由于动画为全屏显示,无法截图,只好照下来进行截图,图片可能会不太清晰。

通过改变指令,也可以改变汽车和小鸟开始的位置。

这次课程设计让我们巩固和加深了对微机原理与接口技术的理解,提高综合运用本课程所学知识的能力。

通过实际分析设计,调试程序,也掌握了微机原理与接口技术的基本规程和各个指令的使用。

参考文献:

1.钱晓捷主编:

《微机原理与接口技术》,第4版,机械工业出版社,2008年1月出版;

2.沈美明等编著:

《80X86汇编语言程序设计》,清华大学出版社,2001年9月出版;

3.杨素行等编著:

《微型计算机系统原理及应用》,第2版,清华大学出版社,2004年2月出版;

4.WWW.UT365.COM。

 

设计总结:

这次课程设计对我来说,确实是一项不简单的任务。

经过几天的努力,不断地翻书查资料,向老师同学请教,对汇编语言也有了进一步的认识和掌握,进一步理解了各个指令的功能,特别是转向指令和中断指令,也熟悉了子程序的定义和调用。

通过这次亲自动手认真做课程设计,我进一步熟悉了汇编语音的结构和使用方法,以前学习时不太懂的地方,有了更深刻的认识,基本达到了能读懂汇编语言理解其功能的水平。

这次课程设计也让我获得了宝贵的经验,为以后的毕业设计打下了良好的基础,培养了自己选用参考书,查阅文献资料的能力,提高独立思考,深入研究,分析问题解决问题的能力,知道了理论和实践相结合的重要性。

学习就是不断地发现问题解决问题的过程,在这期间我们会学会很多东西,要注意多动脑子勤思考,不懂得地方要向老师请教,争取能够明白。

指导教师评语:

 

课程设计成绩:

指导教师签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1