汇编程序设计--电梯模型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计要求:
(1). 在1-- 8楼之间一次可输入多个任意楼层号连续控制电梯按指定楼层号顺序上升与下降.以上过程完成后可重新输入任意楼层号连续控制电梯按指定楼层号顺序上升与下降.只有按ESC键才退出程序返回DOS状态。例如: 1-3-5-7-6-4-2-1 (可观察教十楼电梯的实际运行情况).
(2). 在1 -- 7 楼之间按任意顺序不连续控制电梯上升与下降. 按一次计算机键盘的上箭头电梯上升一楼,按一次计算机键盘的下箭头电梯下降一楼. (上箭头的ASCII码18H , 下箭头的ASCII码19H . )
(3). 在电梯上升与下降过程中,要显示出1--7 楼之间所要到达的楼层数,同时还要用箭头显示电梯是上升状态还是下降状态.
(4). 电梯运行到指定楼层后,打开电梯门,然后关门继续运行.
(5). 电梯运行时, 在任意时刻遇到紧急情况时应能实时中断电梯运行.也可以在任意时刻恢复电梯运行.(按A/a 键模拟中断发生,电梯停止运行.按B/b 键恢复电梯运行)
(6). 在计算机屏幕上将电梯的平面模型改成三维立体模型.
(7). 在电梯旁画一个小方块.这个小方块随电梯上升而上升,下降而下降.以增加电梯运行时的动感.
(8). 电梯仿真软件运行时,应在计算机屏幕上详细说明其使用方法,以及本软件作者姓名和日期.
需求分析
此次课程设计我选择了题目一的电梯仿真程序作为自己的内容!上面的实验要求已经把设计要求说了很清楚了,我在这里再把要求分析一下。该程序需要满足的要求1)能在运行界面按楼层号实现电梯的上升下降,准确的停下来,开门关门,只有当按下ESC键是退出到DOS界面2)在键盘上按上升箭头键一次电梯上升一层,下降箭头键下降一层,这里我把上升箭头键改为c键下降箭头键改为d(ASCII为63H和64H),因为上升箭头和下降箭头键试验时不能成功,但是用别的键都可以成功!!3)在电梯上升或者下降的是要用箭头显示其是上升还是下降状态4)电梯运行到目的楼层时要先开电梯门,然后合上5)在电梯运行过程中要是遇到紧急情况,在任意时刻要能中断电梯运行状态,然后能通过按键模拟的方式使其继续运行6)电梯在屏幕上显示了全部楼层8层,但是没有画出三维立体模型7)需要在电梯旁边画上一个小方块,使其随着电梯一起运用,增加电梯的动感8)在电梯软件运行时,能在计算机屏幕上显示器使用方法及软件作者名称和日期!!
设计思想
设计思想就是采用模块化编程,分别实现每个小的功能的子程序,然后把各个小得子程序拼接而成具备各种需求功能的电梯软件。1)首先就是画出八层的楼房built,包括上顶、中间的电梯框、下面的地板。其实在这一块看似很简单的模块中耗费了我大量的精力,事实上到现在我也不知道为什么会是那样的结果,当时最开始用的通用寄存器来编程序传值,但是老是只能显示五层当CX=5或者5一下的时候能显示正常,但是一旦显示CX=8时也是能显示5层,后来用的存储器来传值才把这八层完整的显示出来。2)门的开关open和close,最开始我准备用画横的宏来实现,但是后来我给否决了,感觉不如用画竖的宏来的简单,开门就用黑色的线来覆盖以前有颜色的线;关门就是用有颜色的线来画一条一条的线来给我们的视觉觉得是慢慢的关的!3)实现电梯的上升和下降raise和down子程序,其实编写这两
个程序挺简单的,因为这和第二模块的内容相似,只不过现在要改成用画横的宏来实现电梯的上升和下降4)检测在程序运行中有没有按下中断暂停键a,若按下,则程序要暂停下来等待输入继续运行键b之后才能继续运行,这个功能的实现就是要知道int 16h 01h的功能5)退出到DOS界面的子程序,其实这个程序和上面的编写思路是一样的这是要用int 16h 的功能调用若有按键按下且是ESC则退出到DOS界面6)最麻烦的就是这一模块了,就是把这些模块串联起来,看似简单,但是很是麻烦,因为之前的功能需要给用一些寄存器,存储器给他们串联一起,才能让它们准确的开门、关门,电梯的上升、下降。最开的就需要判断输入的是不是上升键c或者下降键d,若是只能上升或者下降一层,需要提前给需要到的楼层[DE]赋值,若不是则直接把输入的值带到上升或者下降(raise和down);到达只能楼层之后也要把目的楼层号和开关门对应起来,还需要实时检测有没有暂停键和退出键的输入,以及文本出现的位子需要不断的调试,又因为win7的机子带来的调试的难题,所以工作量还是很大的。7)最后就是一些修饰工作,加上一些动态的数码显示,箭头标示其上下状态,楼层的标注,使用方法以及使用说明!!
程序清单
CLSS MACRO ; 清屏之宏
MOV BH,7 ; 卷入行属性,黑底白字,正常显示.
MOV AX,0600H ; AH=6 屏幕初始化或上卷.AL=0 整个窗口空白.
INT 10H ; CH=左上角行号,CL=左下角列号.
ENDM ; DH=右上角行号,DL=右下角列号.
;-----------------------------------------------------------
GB MACRO ; 移光标之宏
MOV BH,00H ; BH=页号DH,DL=行号,列号.
MOV AH,02H ; AH=2 置光标位置.
INT 10H
ENDM
;------------------------------------------------
HENG MACRO X1,Y1,COLOR,X2 ; 写横的宏
LOCAL BH1 ; 定义标号
PUSH AX ;寄存器压栈
push bx
PUSH CX
PUSH DX
MOV CX,X1 ; 起始点横作标-->CX
MOV DX,Y1 ; 起始点纵作标-->DX
BH1:
MOV AH,0CH ; 写象素
MOV AL,COLOR ; 设定颜色参数-->AL
INT 10H
INC CX
CMP CX,X2 ; 写至终点横作标为止
JNZ BH1
POP DX
POP CX