汽车动画设计
电子计算机是20世纪科学技术最卓越的成就之一。计算机技术的发展所带来的信息技术的飞速发展,给人类社会带来了进步,是人们的生产、生活发生了深刻的变化。计算机知识与应用技术已经成为了人类知识生活十分重要的组成部分。
自从1946年世界上第一台电子计算机由美国宾夕法尼亚大学研制成功,时至今日计算机已经进入了第五代计算机时代。在此过程中计算机经历了电子管、晶体管、集成电路、超大规模集成电路四个阶段,现在各国都在致力开发第五代即智能计算机。以微处理器为核心的微型计算机,也从4位、8位、16位发展到32位、64位,计算机的应用范围也从最初的科学计算发展到目前的无所不及。
微型计算机是第四代计算机的典型代表。随着VLSI技术的发展,构成微型计算机的核心单元CPU不断更新换代,但是计算机的原理基本上没有变。所以通过学习8086CPU的系统结构、基本原理、指令系统、中断及接口等知识,也可以在实践中掌握和运用计算机知识。
程序设计首先要将问题分解成一个一个的步骤,每步都可以用汇编语言中的指令性语句,按照先后顺序表达。
设计一个好的程序,不仅要满足设计要求,能正常运行,实现预定功能,还应满足:
1)结构化、简明、易读、易调试、易维护;
2)执行速度快;
3)占用存储空间尽量少。
汇编语言程序设计步骤如下:
1)分析问题,抽象出问题的数学模型,确定解决问题的合理算法;
2)将问题分解成若干模块,理清各部分之间关系;
3)绘制流程图或写出程序步骤,可以从粗到细地把算法逐步具体化;
4)分配存储空间及工作单元,根据流程图编写程序;
5)静态检查,仔细阅读程序尽量找出诸如语法、逻辑等错误;
6)上机调试。
运用汇编语言编写程序完成以下任务:
1、运行可执行程序,显示汽车来过。
2、设计适当的背景变化。
3、按Q 键退出程序。
要完成以上任务,首先要掌握汇编语言的结构、指令及语句格式分类,还要熟悉BIOS 及DOS 的功能调用,如在设计的程序中用到的对屏幕操作的“INT 10H ”,对键盘操作的“INT 16H ”等。
小汽车的图形是由一些字母和符号组成,字符图形表如下:
CAR DB 7 ;
DB 52H,7,0,0
DB 0B1H,7,0,1
DB 0DBH,7,0,1
DB 0DBH,7,0,1
DB 4FH,7,1,0
DB 4FH,7,0,-3
DB 2,7,-2,1
通过对题目任务的分析,画出主程序流程图如图1所示:
AL 是否为
C
设置屏幕显示方式,并从键
盘读取字符存入AL
开始
建立汽车字符图形表,并初
始化
Y
N
N
图1主程序流程图
汽车子程序流程图如图2所示:运动子程序流程图如图3所示:
Y
开始
入栈保护
设置屏幕显示
方式
设置色彩组颜
色
清屏宏调用
CAR的首址DI
汽车显示位置
运动子程序运
行
显示字符
DI+4指向下一个字符
开始
入栈保护
设置显示方式
字符个数存放入CL DI指向字符图形表
改变行列坐标
取字符并字符属性
图2汽车子程序流程图图3运动子程序流程图题目源程序如下:
DATA SEGMENT
INFO1 DB 0DH,0AH,'INPUT c OR q:(c:car,q:exit) $'
CAR DB 7 ;小汽车的字符图形表
DB 52H,7,0,0
DB 0B1H,7,0,1
DB 0DBH,7,0,1
DB 0DBH,7,0,1
DB 4FH,7,1,0
DB 4FH,7,0,-3
DB 2,7,-2,1
CHAR_CNT DW ?
POINTER DW ?
LINE_ON DB ?
COL_ON DB ?
DATA ENDS
STACK SEGMENT stack
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:MOV AH,DATA
MOV DS,AH
MOV AH,0 ;设置显示方式为320*200彩色图形方式
MOV AH,4
INT 10H
LED DX,INFO1 ;在显示器上显示字符串提示信息MOV AH,9
INT 21H
MOV AH,0 ;从键盘读取字符到AL寄存器
INT 16H
CMP AL,43H ;比较AL是否等于c
JNE A
CALL QICHE
A: CMP AL,63H
JNE B
CALL QICHE
B: CMP AL,51H
JNE D
JMP E
D: CMP AL,71H
JNE START
E:MOV AH,4CH ;终止当前程序并返回调用程序INT 21H
CLEAR MACRO pch,pcl,pdh,pdl,pbh ;清屏宏定义MOV AH,0
MOV AL,4
INT 10H
MOV AH,6 ;调用6号功能
MOV AL,0 ;设置整个屏幕为空白
MOV CH,pch
MOV CL,pcl ;窗口左上角(0行,0列)
MOV DH,pdh
MOV DL,pdl ;窗口右下角(24行,79列)
MOV BH,pbh ;正常属性显示
ENDM
DLY PROC NEAR ;延时子程序
PUSH CX
PUSH DX
MOV DX,10000
DL1: MOV CX,6801
DL2: LOOP DL2
DEC DX
JNZ DL1
POP DX
POP CX
RET
DLY ENDP
QICHE PROC NEAR;汽车子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,0
MOV AL,4
INT 10H
MOV AH,0BH ;设置彩色组颜色为绿、红、黄MOV BH,01
MOV BL,00
INT 10H
CLEAR 0,0,24,79,7 ;清屏宏调用
LEA DI,CAR ;DI指向字符图形表
MOV DH,5 ;从第5行5列位置开始显示汽车
CALL MOVE_SHAPE
RET
QICHE ENDP
MOVE_SHAPE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AH,0FH ;取当前显示方式
INT 10H
SUB CH,CH
MOV CL,[DI] ;CL放字符个数
INC DI ;DI指向字符图形表中的第一个字符MOV CHAR_CNT,CX
MOV POINTER,DI
MOV LINE_ON,DH
MOV COL_ON,DL
PLOT_NEXT:
ADD DH,[DI+2] ;改变行列坐标
ADD DL,[DI+3]
CMP DL,80 ;出屏否?
JB MOV_CRSR
POP DI
POP DX
POP CX
POP BX
POP AX
MOV_CRSR:
MOV AH,2
INT 10H
MOV AL,[DI] ;取字符值MOV BL,[DI+1] ;取字符属性PUSH CX
MOV CX,1
MOV AH,09 ;显示字符
INT 10H
POP CX
ADD DI,4 ;DI指向下一个字符LOOP PLOT_NEXT
CALL DLY
CALL ERASE
JMP SHORT PLOT_NEXT EXIT2: RET
MOVE_SHAPE ENDP ERASE PROC NEAR
MOV CX,CHAR_CNT
MOV DI,POINTER
MOV DH,LINE_ON
MOV DL,COL_ON
ERASE_NEXT:
ADD DH,[DI+2]
ADD DL,[DI+3]
MOV AH,2
INT 10H
MOV AL,[DI]
MOV BL,0
PUSH CX
MOV CX,1
MOV AH,9
INT 10H
POP CX
ADD DI,4
LOOP ERASE_NEXT
MOV CX,CHAR_CNT
MOV DI,POINTER
MOV DH,LINE_ON
INC COL_ON
MOV DL,COL_ON
RET
ERASE ENDP
CODE ENDS
END START
4程序调试
在设计完每个模块后,都单独的运行调试,发现有问题则找到问题并且解决后再进行下一步的设计工作。在每个模块单独的调试中基本上没有遇到什么大的问题,只是有一些语法上的错误,在各个模块分别设计完成后,将它们按照通信关系组合在一起,一步步再进行调试。
程序调试过程中遇到了一些问题。执行中断时屏幕上显示提示字符后,无法显示小车。经过检查思考后发现,在程序中将模块间的关系搞混乱了,重新调整各个模块间的关系,以及中断处理的关系后,程序能够正确的执行了,进行运算检验,程序都可以正确的执行。
通过调试,发现了设计中存在的漏洞,经过修改,成功地完成了设计任务的
要求。
总结
通过这次为期两周的微机原理课程设计,我深深的感觉到这次的课设是比较难的,比较复杂的,让我深深的感觉到自己的不足。这次课设是一次具有挑战性的实践课程,在整个课程设计过程中我遇到很多困难。
首先是在处理题目上遇到一些问题,在理解题意分析时,出现偏差,导致错误,从中明白到要做到理论联系实际是相当困难的。而且在写报告过程中发现自己对于课本的理论知识的理解是多么的匮乏,以致在报告中对于理论的阐述和自己的见解是很寥少的。
但是正是这次极具挑战性的课设,使我得到了锻炼和学习。通过对于汇编语言的应用,我学会了一些编程方法,知道了课堂知识运用与实践的困难,而这些对自身的以后的学习都有很大帮助。
通过这次的课程设计我学会了很多东西,了解到理论联系实际是多么重要,同时又是多么的困难,还有平时学习一定要认真踏实,把理论知识要弄懂要理解消化为自己的知识,同时要学会在理论学习时善于思考,多得一些自己的想法和思路,并且多读一些课外书,开阔视野增长一些课外知识。
感谢这次课设过程中给予我帮助同学和老师,并且感谢学校给予我们这次机会提高自己的实践能力。这次的课设终于结束了,我感到什么事都不应该轻易放弃,只要努力就会有结果。再次深深的感谢老师对于我的帮助与指导,使我学到这么多东西,也再次感谢给予我帮助的同学们!
参考文献
[1]彭虎,周佩玲.傅忠谦编著.2006.微机原理与接口技术.第二版.北京:电子工业出版社
[2](美)Randall Hyde著.陈曙晖译.毛希平校.2005.汇编语言编程艺术.北京:清华大学出版社
[3](美)Kip R.Irvine著.温玉杰、张家生、罗云彬等译.罗云彬校.2004.Intel 汇编语言程序设计.第四版.北京:电子工业出版社
[4]金汉均、金洋编著.2007.5.汇编语言程序设计.武汉:武汉大学出版社
[5]荆淑霞编著.2005.9.微机原理与汇编语言程序设计.北京:清华大学出版社,北京交通大学出版社
附录1:INT 10H中断
功能号:00H
功能:设置显示模式
入口参数:AH=00H
AL=显示模式
显示模式列表:
显示模式显示模式属性
00H 40×25 16色文本
01H 40×25 16色文本
02H 80×25 16色文本
04H 320×200 4色
05H 320×200 4色
06H 640×200 2色
07H 80×25 2色文本
08H 160×200 16色
09H 320×200 16色
0AH 640×200 4色
0BH 保留
0CH 保留
0DH 320×200 16色
0EH 640×200 16色
0FH 640×350 2色(单色)
10H 640×350 4色
11H 640×480 2色
12H 640×480 16色
13H 320×200 256色
功能号:02H
功能:用文本坐标下设置光标位置
入口参数:AH=02H
BH=显示页码
DH=行(Y坐标)
DL=列(X坐标)出口参数:无
功能号:09H
功能:在当前光标处按指定属性显示字符
入口参数:AH=09H
AL=字符
BH=显示页码
BL=属性(文本模式)或颜色(图形模式)
CX=重复输出字符的次数出口参数:无
功能号:0BH
功能:设置调色板、背景色或边框
入口参数:AH=0BH
设置颜色:BH=00H,BL=颜色
选择调色板:BH=01H,BL=调色板(320×200、4种颜色的图形模式)出口参数:无
功能号:0FH
功能:读取显示器模式
入口参数:AH=0FH
出口参数:AH=屏幕字符的列数
AL=显示模式(参见功能00H中的说明)
BH=页码
附录2:INT 16H中断
功能号:00H和10H
功能:从键盘读入字符
入口参数:AH
=00H—读键盘
=10H—读扩展键盘,可根据0000:0496H单元的内容判断:
扩展键盘是否有效
出口参数:AH=键盘的扫描码
AL=字符的ASCII码
本文来自新动力影视传媒https://www.360docs.net/doc/0e8211926.html,转载请注明