电梯模拟汇编程序.docx
- 文档编号:9714393
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:20
- 大小:18.10KB
电梯模拟汇编程序.docx
《电梯模拟汇编程序.docx》由会员分享,可在线阅读,更多相关《电梯模拟汇编程序.docx(20页珍藏版)》请在冰豆网上搜索。
电梯模拟汇编程序
;------------电梯模拟程序-----------------------------------------------
CLSSMACRO;清屏之宏
MOVBH,7;卷入行属性,黑底白字,正常显示.
MOVAX,0600H;AH=6屏幕初始化或上卷.AL=0整个窗口空白.
INT10H;CH=左上角行号,CL=左下角列号.
ENDM;DH=右上角行号,DL=右下角列号.
;-----------------------------------------------------------
GBMACRO;移光标之宏
MOVBH,00H;BH=页号DH,DL=行号,列号.
MOVAH,02H;AH=2置光标位置.
INT10H
ENDM
;------------------------------------------------
HENGMACROX1,Y1,COLOR,X2;写横的宏
LOCALBH1;定义标号
MOVCX,X1;起始点横作标-->CX
MOVDX,Y1;起始点纵作标-->DX
BH1:
MOVAH,0CH;写象素
MOVAL,COLOR;设定颜色参数-->AL
INT10H
INCCX
CMPCX,X2;写至终点横作标为止
JNZBH1
ENDM
;------------------------------------------------
SHUMACROCX1,CY1,COLOR,CY2;写竖的宏
LOCALBH2;定义标号
MOVCX,CX1
MOVDX,CY1
BH2:
MOVAH,0CH
MOVAL,COLOR;AL=(00--0FH)共16种颜色.
INT10H
INCDX
CMPDX,CY2
JNZBH2
ENDM
;--------------------------------------
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
MOV[DZ],DX
ADDDX,20
MOVDX1,DX
UPb:
HENG170,[DZ],00H,190;画小方块
INC[DZ]
MOVAX,DX1
CMP[DZ],AX
JNZUPb
ENDM
;---------------------------------------------
DOWNMACRON,DX1;小方块下降的宏
LOCALDNa,DNb;定义标号
MOVAL,N;小方块从N+1层下降至N层
MOVCH,30;小方块下降一层,并且将上一层的小方块清除
MULCH
MOVDX,430
SUBDX,AX
MOV[DZ],DX
ADDDX,20
MOVDX1,DX
DNa:
HENG170,[DZ],05H,190;画小方块
INC[DZ]
MOVAX,DX1
CMP[DZ],AX
JNZDNa
SUBDX,49
MOV[DZ],DX
ADDDX,20
MOVDX1,DX
DNb:
HENG170,[DZ],00H,190;画小方块
INC[DZ]
MOVAX,DX1
CMP[DZ],AX
JNZDNb
ENDM
;---------------------------------------------
INITMACRON,DX1;画初始小方块的宏
LOCALBEG;定义标号
MOVAL,N;小方块最初停在第N层,表示电梯最初停在第N层
MOVCH,30
MULCH
MOVDX,430
SUBDX,AX
MOV[DZ],DX
ADDDX,20
MOVDX1,DX
BEG:
HENG170,[DZ],05H,190;画小方块
INC[DZ]
MOVAX,DX1
CMP[DZ],AX
JNZBEG
ENDM
;-------------------------------------------
CLOSEMACRO;画电梯关门状态的宏
LOCALCC;定义标号
MOV[DZ],220
CC:
HENG210,[DZ],09H,370;电梯关门
INC[DZ]
CMP[DZ],420
JNZCC
SHU291,220,02H,420;电梯大门缝隙
SHU290,220,02H,420
SHU289,220,02H,420
ENDM
;---------------------------------------------
HALFMACRO;画电梯半开门状态的宏
LOCALHA;定义标号
MOV[DZ],221
HA:
HENG210,[DZ],09H,250;电梯半开门
HENG252,[DZ],07H,328
HENG330,[DZ],09H,370
INC[DZ]
CMP[DZ],420
JNZHA
SHU251,220,02H,420;电梯大门缝隙
SHU329,220,02H,420
ENDM
;---------------------------------------------
FULLMACRO;画电梯全开门状态的宏
LOCALF;定义标号
MOV[DZ],221
F:
HENG210,[DZ],09H,215;电梯全开门
HENG217,[DZ],07H,363
HENG365,[DZ],09H,370
INC[DZ]
CMP[DZ],420
JNZF
SHU216,220,02H,420;电梯大门缝隙
SHU364,220,02H,420
ENDM
;---------------------------------------------
DATASEGMENT
MESSDB'elevatormodel',0AH,0DH,'$'
ME1DB'pressanykeytoreturnDOS.',0AH,0DH,'$';当使用者进行非正常操作时,提示使用者手动返回DOS
ME2DB'nowtheflooris:
',0AH,0DH,'$';提示当前楼层
ME3DB'direction:
',0AH,0DH,'$'
ME4DB'inputthefloor(1-8F)(suchas1-3-4-1):
$'
ME5DB'author:
WangHuiTing',0AH,0DH,'$';输出多个空格键是为了清空上一次的输入
ME6DB'data:
2011-12-16',0AH,0DH,'$'
ME7DB'TO:
',0AH,0DH,'$';提示电梯下一站要停的楼层
ME8DB'upordownafloor,',0AH,0DH,'$';提示使用者用上、下键不连续控制电梯
ME9DB'onlyvailablewhenelevator',0AH,0DH,'$'
ME10DB'stop(usewors)',0AH,0DH,'$'
ME11DB'~nowvailable',0AH,0DH,'$'
ME12DB'',0AH,0DH,'$'
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
INT1AH
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
INT10H
MOVAX,0012H;置图形显示方式
INT10H;640列*480行,16色.
MOVDX,0421H;显示MESS
GB
MOVDX,OFFSETMESS
MOVAH,9
INT21H
MOVDX,0432H;显示ME5
GB
MOVDX,OFFSETME5
MOVAH,9
INT21H
MOVDX,0532H;显示ME6
GB
MOVDX,OFFSETME6
MOVAH,9
INT21H
MOVDX,0
GB
MOV[DZ],100
SB:
HENG220,[DZ],03,420;显示栏
INC[DZ]
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;三维电梯右侧面
INC[DZ]
DECDX1
DECDX2
CMP[DZ],410
JNZSB2
MOV[DZ],420
SB3:
HENG70,[DZ],02H,480;画地平线
INC[DZ]
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
GB
MOVDX,OFFSETME2;显示ME2
MOVAH,9
INT21H
MOVDX,081DH
GB
MOVDX,OFFSETME3;显示ME3
MOVAH,9
INT21H
MOVDX,082DH
GB
MOVDX,OFFSETME7;显示ME7
MOVAH,9
INT21H
SA1s:
MOVDX,0202H;显示ME4
GB
MOVDX,OFFSETME4
MOVAH,9
INT21H
MOVDX,0229H
GB
MOVDX,OFFSETIBUFF;输入并显示字符串
MOVAH,10
INT21H
MOVDX,0402H;提示使用者用上、下键不连续控制电梯
GB
MOVDX,OFFSETME8;显示ME8
MOVAH,9
INT21H
MOVDX,0502H
GB
MOVDX,OFFSETME9;显示ME9
MOVAH,9
INT21H
MOVDX,0602H
GB
MOVDX,OFFSETME10;显示ME10
MOVAH,9
INT21H
SA1:
MOVAL,IBUFF+1
MOVCOUNT,AL;记录输入的字符个数
MOVBP,2
MOVAL,IBUFF[BP]
CMPAL,30H;将首字符与1BH(ESCASCII码)比较,若相等则返回DOS,这里由于汇编软件的原因改为与0的ASCII码比较
JZWA1
CMPAL,30H;避免当使用者出入其它键是程序进入死循环
JBWA0
CMPAL,38H
JAWA0
ANDAL,0FH
MOVNUM,AL
INITNUM,DX1
MOVDX,072FH
GB
MOVDL,NUM;显示电梯第一站楼层数
ORDL,30H;将数字转换为字符
MOVAH,2
INT21H
CALLDELAY1S
SA1a:
ADDBP,2
MOVAL,IBUFF[BP]
ANDAL,0FH;将字符转换为数字
MOVNUM1,AL
MOVDX,0830H
GB
MOVDL,IBUFF[BP];显示电梯下一站要停的楼层数
MOVAH,2
INT21H
CALLDELAY1S
SA1b:
MOVAL,NUM1;下一站要去的楼层和当前所在楼层相比较
CMPAL,NUM;若下一站楼层大于当前楼层,则小方块上升
JASA1c;若下一站楼层小于当前楼层,则小方块下降
MOVAL,NUM1;若下一站楼层等于当前楼层,则小方块不动
CMPAL,NUM;这里有2次比较
JZSA1d;到达所在楼层后停止运动
DECNUM
DOWNNUM,DX1;电梯下降
MOVDX,0829H
GB
MOVDL,19H;显示下箭头
MOVAH,2
INT21H
MOVDX,072FH
GB
MOVDL,NUM;显示当前楼层数
ORDL,30H;将数字转换为字符
MOVAH,2
INT21H
CALLDELAY1S;小方块在每一层停止1S可让人更直观地看清电梯的运行状况
JMPSA1b
SA1c:
INCNUM
UPNUM,DX1;电梯上升
MOVDX,0829H
GB
MOVDL,18H;显示上箭头
MOVAH,2
INT21H
MOVDX,072FH
GB
MOVDL,NUM;显示当前楼层数
ORDL,30H;将数字转换为字符
MOVAH,2
INT21H
CALLDELAY1S
JMPSA1b
SA1d:
HALF;电梯在指定楼层停下,大门依次从闭合-半开门-全开门-半开门-全开门
CALLDELAY1S
FULL
CALLDELAY1S
HALF
CALLDELAY1S
CLOSE
CALLDELAY1S
MOVDX,0702H
GB
MOVDX,OFFSETME11;显示ME11,表明现在可以进行不连续控制
MOVAH,9
INT21H
XORAX,AX
INT1AH
MOVTIMES,DX
MOVTIMES[2],CX
read_time1:
CLC
MOVAH,1;输入上、下键
INT16H
JNZget
XORAX,AX
INT1AH
SUBDX,TIMES
SBBCX,TIMES[2]
CMPDX,DIDAS
JBread_time1
JMPshow1
get:
CMPAL,'w'
JZups1
CMPAL,'s'
JZdowns1
JMPSA1e
ups1:
INCNUM
UPNUM,DX1;电梯上升一层
JMPshow
downs1:
DECNUM
DOWNNUM,DX1;电梯下降
show:
MOVDX,072FH
GB
MOVDL,NUM;显示当前楼层数
ORDL,30H;将数字转换为字符
MOVAH,2
INT21H
MOVAH,0CH
INT21H;清空键盘缓冲区
show1:
MOVDX,0702H
GB
MOVDX,OFFSETME12;显示ME12,表明现在不可以进行不连续控制
MOVAH,9
INT21H
SA1e:
MOVAL,COUNT;电梯向下一站运行
CBW
CMPBP,AX
JBSA1a
JMPSA1s;电梯重新进行新的一轮的运行
WA0:
MOVDX,1834H;显示ME1
GB
MOVDX,OFFSETME1
MOVAH,9
INT21H
MOVDL,0FFH
MOVAH,6
INT21H
JZWA0
MOVCX,0
MOVDX,2479H
CLSS
WA1:
MOVAX,4C00H
INT21H;返回DOS.
MOVAH,02H
INT10H;恢复文本显示方式.
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
RET
STARTENDP
;---------------------------------------
CODEENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电梯 模拟 汇编程序