电梯模拟汇编程序Word文档下载推荐.docx
《电梯模拟汇编程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电梯模拟汇编程序Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
LOCALBH2;
MOVCX,CX1
MOVDX,CY1
BH2:
MOVAH,0CH
AL=(00--0FH)共16种颜色.
INCDX
CMPDX,CY2
JNZBH2
--------------------------------------
UPMACRON,DX1;
小方块上升的宏
LOCALUPa,UPb;
MOVAL,N;
小方块从N-1层上升至N层
MOVCH,30;
小方块上升一层,并且将下一层的小方块清除
MULCH
MOVDX,430
SUBDX,AX
MOV[DZ],DX
ADDDX,20
MOVDX1,DX
UPa:
HENG170,[DZ],05H,190;
画小方块
INC[DZ]
MOVAX,DX1
CMP[DZ],AX
JNZUPa
ADDDX,11
UPb:
HENG170,[DZ],00H,190;
JNZUPb
---------------------------------------------
DOWNMACRON,DX1;
小方块下降的宏
LOCALDNa,DNb;
小方块从N+1层下降至N层
小方块下降一层,并且将上一层的小方块清除
DNa:
JNZDNa
SUBDX,49
DNb:
JNZDNb
INITMACRON,DX1;
画初始小方块的宏
LOCALBEG;
小方块最初停在第N层,表示电梯最初停在第N层
MOVCH,30
BEG:
JNZBEG
-------------------------------------------
CLOSEMACRO;
画电梯关门状态的宏
LOCALCC;
MOV[DZ],220
CC:
HENG210,[DZ],09H,370;
电梯关门
CMP[DZ],420
JNZCC
SHU291,220,02H,420;
电梯大门缝隙
SHU290,220,02H,420
SHU289,220,02H,420
HALFMACRO;
画电梯半开门状态的宏
LOCALHA;
MOV[DZ],221
HA:
HENG210,[DZ],09H,250;
电梯半开门
HENG252,[DZ],07H,328
HENG330,[DZ],09H,370
JNZHA
SHU251,220,02H,420;
SHU329,220,02H,420
FULLMACRO;
画电梯全开门状态的宏
LOCALF;
F:
HENG210,[DZ],09H,215;
电梯全开门
HENG217,[DZ],07H,363
HENG365,[DZ],09H,370
JNZF
SHU216,220,02H,420;
SHU364,220,02H,420
DATASEGMENT
MESSDB'
elevatormodel'
0AH,0DH,'
$'
ME1DB'
pressanykeytoreturnDOS.'
0AH,0DH,'
当使用者进行非正常操作时,提示使用者手动返回DOS
ME2DB'
nowtheflooris:
'
提示当前楼层
ME3DB'
direction:
'
ME4DB'
inputthefloor(1-8F)(suchas1-3-4-1):
$'
ME5DB'
author:
WangHuiTing'
输出多个空格键是为了清空上一次的输入
ME6DB'
data:
2011-12-16'
ME7DB'
TO:
提示电梯下一站要停的楼层
ME8DB'
upordownafloor,'
提示使用者用上、下键不连续控制电梯
ME9DB'
onlyvailablewhenelevator'
ME10DB'
stop(usewors)'
ME11DB'
~nowvailable'
ME12DB'
IBUFFDB0FFH,0,255DUP(0)
DIDASEQU18
DZDW0
TIMESDW0,0
NUMDB0
NUM1DB0
COUNTDB0
COUNT1DB0
DX1DW3
DX2DW6
DATAENDS
---------------------------------------
STACSEGMENT
STADW100DUP(0);
堆栈段
TOPDW?
STACENDS
---------------------------------------
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA;
ES:
DATA,SS:
DATA
DELAY1SPROCNEAR;
延时1S的子函数
PUSHDX
PUSHCX
XORAX,AX
INT1AH
MOVTIMES,DX
MOVTIMES[2],CX
read_time:
XORAX,AX
SUBDX,TIMES
SBBCX,TIMES[2]
CMPDX,DIDAS
JBread_time
POPCX
POPDX
RET
DELAY1SENDP
STARTPROCFAR
MOVAX,DATA;
主程序
MOVDS,AX
MOVAX,STAC
MOVSS,AX
MOVAX,DATA
MOVES,AX
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
MOVCX,0
MOVDX,2479H
MOVBH,7
MOVAX,0601H
MOVAX,0012H;
置图形显示方式
640列*480行,16色.
MOVDX,0421H;
显示MESS
GB
MOVDX,OFFSETMESS
MOVAH,9
INT21H
MOVDX,0432H;
显示ME5
MOVDX,OFFSETME5
INT21H
MOVDX,0532H;
显示ME6
MOVDX,OFFSETME6
MOVDX,0
MOV[DZ],100
SB:
HENG220,[DZ],03,420;
显示栏
CMP[DZ],150
JNZSB
HENG220,99,0AH,420;
显示栏边框
HENG220,151,0AH,420
SHU220,99,0AH,151
SHU420,99,0AH,151
CLOSE;
电梯大门处于关闭状态
HENG210,220,02H,370;
电梯大门缝隙边框
HENG210,420,02H,370
SHU210,220,02H,420
SHU370,220,02H,420
HENG209,219,02H,371;
加粗边框
SHU209,220,02H,420
SHU371,220,02H,420
MOV[DZ],219
MOVDX1,210
MOVDX2,370
SB1:
HENGDX1,[DZ],03H,DX2;
三维电梯上侧面
DEC[DZ]
INCDX1
INCDX2
CMP[DZ],180
JNZSB1
MOV[DZ],371
MOVDX1,220
MOVDX2,420
SB2:
SHU[DZ],DX1,03H,DX2;
三维电梯右侧面
DECDX1
DECDX2
CMP[DZ],410
JNZSB2
MOV[DZ],420
SB3:
HENG70,[DZ],02H,480;
画地平线
CMP[DZ],425
JNZSB3
MOV[DZ],421
SB4:
HENG160,[DZ],04H,200;
小方块运行在框架内
SUB[DZ],30
CMP[DZ],151
JNZSB4
SHU160,180,04H,420
SHU200,180,04H,420
MOVDX,071DH
MOVDX,OFFSETME2;
显示ME2
MOVDX,081DH
MOVDX,OFFSETME3;
显示ME3
MOVDX,082DH
MOVDX,OFFSETME7;
显示ME7
SA1s:
MOVDX,0202H;
显示ME4
MOVDX,OFFSETME4
MOVDX,0229H
MOVDX,OFFSETIBUFF;
输入并显示字符串
MOVAH,10
MOVDX,0402H;
MOVDX,OFFSETME8;
显示ME8
MOVDX,0502H
MOVDX,OFFSETME9;
显示ME9
MOVDX,0602H
MOVDX,OFFSETME10;
显示ME10
SA1:
MOVAL,IBUFF+1
MOVCOUNT,AL;
记录输入的字符个数
MOVBP,2
MOVAL,IBUFF[BP]
CMPAL,30H;
将首字符与1BH(ESCASCII码)比较,若相等则返回DOS,这里由于汇编软件的原因改为与0的ASCII码比较
JZWA1
避免当使用者出入其它键是程序进入死循环
JBWA0
CMPAL,38H
JAWA0
ANDAL,0FH
MOVNUM,AL
INITNUM,DX1
MOVDX,072FH
MOVDL,NUM;
显示电梯第一站楼层数
ORDL,30H;
将数字转换为字符
MOVAH,2
CALLDELAY1S
SA1a:
ADDBP,2
MOVAL,IBUFF[BP]
ANDAL,0FH;
将字符转换为数字
MOVNUM1,AL
MOVDX,0830H
MOVDL,IBUFF[BP];
显示电梯下一站要停的楼层数
SA1b:
MOVAL,NUM1;
下一站要去的楼层和当前所在楼层相比较
CMPAL,NUM;
若下一站楼层大于当前楼层,则小方块上升
JASA1c;
若下一站楼层小于当前楼层,则小方块下降
若下一站楼层等于当前楼层,则小方块不动
这里有2次比较
JZSA1d;
到达所在楼层后停止运动
DECNUM
DOWNNUM,DX1;
电梯下降
MOVDX,0829H
MOVDL,19H;
显示下箭头
显示当前楼层数
CALLDELAY1S;
小方块在每一层停止1S可让人更直观地看清电梯的运行状况
JMPSA1b
SA1c:
INCNUM
UPNUM,DX1;
电梯上升
MOVDX,0829H
MOVDL,18H;
显示上箭头
CALLDELAY1S
JMPSA1b
SA1d:
HALF;
电梯在指定楼层停下,大门依次从闭合-半开门-全开门-半开门-全开门
FULL
HALF
CLOSE
MOVDX,0702H
MOVDX,OFFSETME11;
显示ME11,表明现在可以进行不连续控制
read_time1:
CLC
MOVAH,1;
输入上、下键
INT16H
JNZget
JBread_time1
JMPshow1
get:
CMPAL,'
w'
JZups1
s'
JZdowns1
JMPSA1e
ups1:
电梯上升一层
JMPshow
downs1:
show:
INT21H;
清空键盘缓冲区
show1:
MOVDX,OFFSETME12;
显示ME12,表明现在不可以进行不连续控制
SA1e:
MOVAL,COUNT;
电梯向下一站运行
CBW
CMPBP,AX
JBSA1a
JMPSA1s;
电梯重新进行新的一轮的运行
WA0:
MOVDX,1834H;
显示ME1
MOVDX,OFFSETME1
MOVDL,0FFH
MOVAH,6
JZWA0
MOVCX,0
CLSS
WA1:
MOVAX,4C00H
返回DOS.
MOVAH,02H
恢复文本显示方式.
POPDI
POPSI
POPBX
POPAX
STARTENDP
CODEENDS
ENDSTART