汇编实现交通灯控制模拟程序设计Word下载.docx

上传人:b****6 文档编号:18541714 上传时间:2022-12-19 格式:DOCX 页数:23 大小:18.80KB
下载 相关 举报
汇编实现交通灯控制模拟程序设计Word下载.docx_第1页
第1页 / 共23页
汇编实现交通灯控制模拟程序设计Word下载.docx_第2页
第2页 / 共23页
汇编实现交通灯控制模拟程序设计Word下载.docx_第3页
第3页 / 共23页
汇编实现交通灯控制模拟程序设计Word下载.docx_第4页
第4页 / 共23页
汇编实现交通灯控制模拟程序设计Word下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

汇编实现交通灯控制模拟程序设计Word下载.docx

《汇编实现交通灯控制模拟程序设计Word下载.docx》由会员分享,可在线阅读,更多相关《汇编实现交通灯控制模拟程序设计Word下载.docx(23页珍藏版)》请在冰豆网上搜索。

汇编实现交通灯控制模拟程序设计Word下载.docx

绿灯亮的时间

YELLOWDB32H,30H;

黄灯亮的时间

SAVEDB35H,30H,?

32H,30H;

初始红,黄两种灯亮的时间

COLOUR_CHANGEDB01H;

COLOUR_CHANGE为1时,表示南北红灯亮。

为0表示东西

SAVE_RED_NBDB?

南北方向

SAVE_YELLOW_NBDB?

SAVE_BLUE_NBDB?

SAVE_RED_DXDB?

东西方向

SAVE_YELLOW_DXDB?

SAVE_BLUE_DXDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVBYTEPTRSAVE_RED_NB,04H;

红色

MOVBYTEPTRSAVE_YELLOW_NB,07H;

白色·

MOVBYTEPTRSAVE_BLUE_NB,07H

MOVBYTEPTRSAVE_RED_DX,07H

MOVBYTEPTRSAVE_YELLOW_DX,0EH;

黄色

MOVBYTEPTRSAVE_BLUE_DX,07H

MOVSI,OFFSETSTRING0

MOVCX,3

ROAD1:

CALLSHOW;

设置南北方向的道路

LOOPROAD1

MOVSI,OFFSETSTRING1

CALLSHOW

MOVSI,OFFSETSTRING2

MOVCX,5

NEXT:

CALLSHOW

LOOPNEXT

MOVSI,OFFSETSTRING3

CALLSHOW

ROAD2:

LOOPROAD2

MOVSI,OFFSETSTRTIME

MOVSI,OFFSETSTRSHOW

MOVSI,OFFSETSTRRED

MOVSI,OFFSETSTRBLUE

CALLNORTH_RED;

设置北边的红灯

CALLNORTH_YELLOW;

设置北边的黄灯

CALLNORTH_BLUE;

设置北边的绿灯

CALLWEST_BLUE;

设置西边的绿灯

CALLWEST_YELLOW;

设置西边的黄灯

CALLWEST_RED;

设置西边的红灯

CALLEAST_RED;

设置东边的红灯

CALLEAST_YELLOW;

设置东边黄灯

CALLEAST_BLUE;

设置东边的绿灯

CALLSOUTH_BLUE;

设置南边绿灯

CALLSOUTH_YELLOW;

设置南边的黄灯

CALLSOUTH_RED;

设置南边的红灯

MOVDH,16

MOVDL,46

MOVAH,02H;

设置光标位置

INT10H

MOVAH,00H;

从键盘读入字符

INT16H

MOVAH,09;

按当前指定属性显示

MOVBH,0

MOVBL,SAVE_RED_NB;

MOVCX,01;

字符重复一次

MOVBYTEPTR[SAVE+1],AL;

输入红灯亮时间十位放在高地址

MOVCX,0FFFFH

DELAY:

LOOPDELAY

MOVDL,47

MOVAH,2;

MOVAH,00H

MOVAH,09

MOVCX,01

MOVBYTEPTR[SAVE],AL;

输入红灯点亮时间的个位放在低地址

DELAY1:

LOOPDELAY1

MOVDL,48

MOVAH,2

MOVCX,01

MOVBYTEPTR[SAVE+2],AL;

在红黄亮灯时间中间可以输入字符加以区分

DELAY2:

LOOPDELAY2

MOVDL,49

MOVBYTEPTR[SAVE+4],AL;

输入黄灯点亮时间的十位放在高地址

DELAY3:

LOOPDELAY3

MOVDL,50

MOVBYTEPTR[SAVE+3],AL;

输入黄灯点亮时间的个位放在低地址

MOVAL,[SAVE]

MOVBYTEPTR[RED],AL;

将输入红灯点亮的时间送入红灯亮的时间

MOVAL,[SAVE+1]

MOVBYTEPTR[RED+1],AL

MOVAL,[SAVE+3]

MOVBYTEPTR[YELLOW],AL;

将黄灯点亮的时间送入红灯亮的时间

MOVAL,[SAVE+4]

MOVBYTEPTR[YELLOW+1],AL

MOVBYTEPTR[SAVE+3],30H;

将输入黄灯点亮时间清零

MOVBYTEPTR[SAVE+4],30H

A1:

MOVDI,OFFSETRED;

红灯亮的时间送DI

MOVSI,OFFSETSAVE

COUNT:

MOVAH,01H;

读取键盘状态

JNZCONTRL;

如果有键盘输入,进入手动控制

AUTO:

MOVDH,14;

如果没有键盘输入,进入自动状态

MOVDL,38

INT10H;

置光标位置

在当前光标处按指定属性显示

MOVAL,[DI+1];

将红灯点亮时间高位送AL并显示

MOVBL,09H;

设置颜色

时间的位置

MOVDL,39

INT10H

MOVAL,[DI];

将红灯点亮时间低位送AL并显示

MOVAH,01H;

隐藏光标

MOVCX,2000H

PUSHAX

PUSHBX

PUSHDX

PUSHCX

INT1AH

ADDDL,18;

18是一秒跳的次数

MOVBL,DL

LOP:

读取当前DL中的值

INT1AH

CMPDL,BL

JNZLOP;

小于一秒,继续计数

INCWORDPTR[SI+3];

每过一秒,黄灯亮的时间加1

MOVCX,WORDPTR[SI+3]

CMPWORDPTR[YELLOW],CX;

将当前黄灯时间与设定黄灯时间比较

JZBIANLV;

若相等,绿灯变绿

BACK1:

DECBYTEPTR[DI];

倒计时减一

CMPBYTEPTR[DI],30H;

红灯时间的个位和0比较

JBCARRY_RED;

小于0,转到借位

POPCX

POPDX

POPBX

POPAX

JMPCOUNT;

BIANLV:

TESTBYTEPTR[COLOUR_CHANGE],00000001B

JZNB_BLUE;

为0,表示南北绿灯亮

MOVBYTEPTR[SAVE_BLUE_DX],0AH;

为1时,东西方向绿灯亮

MOVBYTEPTR[SAVE_BLUE_NB],07H

MOVBYTEPTR[SAVE_YELLOW_DX],07H

MOVBYTEPTR[SAVE_YELLOW_NB],07H

NEW_BLUE:

CALLNORTH_BLUE;

设置西北的绿灯

设置南边的绿灯

设置东边的黄灯

JMPBACK1

NB_BLUE:

MOVBYTEPTR[SAVE_BLUE_NB],0AH;

南北方向的绿灯置为绿色

MOVBYTEPTR[SAVE_BLUE_DX],07H

JMPNEW_BLUE

CARRY_RED:

MOVBYTEPTR[DI],39H;

红灯亮的时间个位置9

SUBBYTEPTR[DI+1],1;

红灯亮的时间十位减1

CMPBYTEPTR[DI+1],30H;

十位和零作比较

JBRESTART;

红灯倒计时结束,重新计时

JMPCOUNT

RESTART:

MOVCL,[SI];

红灯的低位送CL

MOVBYTEPTR[DI],CL

MOVCL,[SI+1]

MOVBYTEPTR[DI+1],CL

MOVBYTEPTR[SI+3],30H

MOVBYTEPTR[SI+4],30H

XORBYTEPTR[COLOUR_CHANGE],00000001B;

对COLOUR_CHANGE最低位取反

TESTBYTEPTR[COLOUR_CHANGE],00000001B

JNZNB_RED;

为1,南北红灯亮

MOVBYTEPTR[SAVE_RED_NB],07H;

南北方向红灯灭

MOVBYTEPTR[SAVE_RED_DX],04H;

东西方向红灯亮

MOVBYTEPTR[SAVE_YELLOW_NB],0EH;

南北方向黄灯亮

NEW_RED:

CALLNORTH_RED;

设置北边红灯

设置东边红灯

NB_RED:

MOVBYTEPTR[SAVE_RED_NB],04H;

南北方向红灯亮

MOVBYTEPTR[SAVE_RED_DX],07H;

东西方向红灯灭

MOVBYTEPTR[SAVE_YELLOW_DX],0EH;

东西方向黄灯亮

JMPNEW_RED

CONTRL:

CMPAL,39H;

判断输入的是否为9,是则进入手动控制

JZHAND_CONTRL

CMPAL,30H;

判断是否为0,是则进入夜间状态

JZNIGHT

CMPAL,38H;

判断是否为8,是则进入紧急状态

JZUNFAIR

JMPAUTO

HAND_CONTRL:

DELAYTIME:

LOOPDELAYTIME

DELAYTIME1:

LOOPDELAYTIME1

DELAYTIME2:

LOOPDELAYTIME2

从键盘上读入字符

INT16H

CMPAL,37H

JZAUTO;

输入字符7时,跳转到自动模式

CMPAL,31H;

输入字符1时,东西方向红灯亮

JZDX_RL

CMPAL,61H;

输入小写a时,东西方向红灯灭

JZDX_RM

CMPAL,32H;

输入字符2时,东西方向黄灯亮

JZDX_YL

CMPAL,62H;

输入小写b时,东西方向黄灯灭

JZDX_YM

CMPAL,33H;

输入字符3时,东西方向绿灯亮

JZDX_BL

CMPAL,63H;

输入小写c时,东西方向绿灯灭

JZDX_BM

CMPAL,34H;

输入字符4时,南北方向红灯亮

JZNB_RL

CMPAL,64H;

输入小写d时,南北方向红灯灭

JZNB_RM

CMPAL,35H;

输入字符5时,南北方向黄灯亮

JZNB_YL

CMPAL,65H;

输入小写e时,南北方向黄灯灭

JZNB_YM

CMPAL,36H;

输入字符6时,南北方向绿灯亮

JZNB_BL

CMPAL,66H;

输入小写f时,南北方向绿灯灭

JZNB_BM

JMPHAND_CONTRL

DX_RL:

MOVBYTEPTRSAVE_RED_DX,04H;

JMPSHOW_DX_RED

DX_RM:

MOVBYTEPTRSAVE_RED_DX,07H;

SHOW_DX_RED:

CALLEAST_RED;

MOVAH,01H;

MOVCX,2000H

INT10H

JMPHAND_CONTRL

DX_YL:

MOVBYTEPTRSAVE_YELLOW_DX,0EH

JMPSHOW_DX_YELLOW

DX_YM:

MOVBYTEPTRSAVE_YELLOW_DX,07H

SHOW_DX_YELLOW:

CALLEAST_YELLOW;

DX_BL:

MOVBYTEPTRSAVE_BLUE_DX,0AH

JMPSHOW_DX_BLUE

DX_BM:

MOVBYTEPTRSAVE_BLUE_DX,07H

SHOW_DX_BLUE:

CALLEAST_BLUE;

NB_RL:

MOVBYTEPTRSAVE_RED_NB,04H

JMPSHOW_NB_RED

NB_RM:

MOVBYTEPTRSAVE_RED_NB,07H

SHOW_NB_RED:

CALLNORTH_RED;

CALLSOUTH_RED;

NB_YL:

MOVBYTEPTRSAVE_YELLOW_NB,0EH

JMPSHOW_NB_YELLOW

NB_YM:

MOVBYTEPTRSAVE_YELLOW_NB,07H

SHOW_NB_YELLOW:

CALLSOUTH_YELLOW;

NB_BL:

MOVBYTEPTRSAVE_BLUE_NB,0AH

JMPSHOW_NB_BLUE

NB_BM:

MOVBYTEPTRSAVE_BLUE_NB,07H

SHOW_NB_BLUE:

CALLSOUTH_BLUE;

NIGHT:

MOVBYTEPTRSAVE_BLUE_NB,07H;

将所有灯熄灭

MOVBYTEPTRSAVE_YELLOW_DX,07H

MOVBYTEPTRSAVE_YELLOW_NB,07H

MOVBYTEPTRSAVE_RED_NB,07H

MOVBYTEPTRSAVE_RED_DX,07H

SHANSUO:

XORBYTEPTRCOLOUR_CHANGE,00000001B;

对COLOUR_CHANGE最低位取反

TESTBYTEPTRCOLOUR_CHANGE,00000001B

JZLIANG

YANSHI:

DELAYTIME5:

LOOPDELAYTIME5

DELAYTIME6:

LOOPDELAYTIME6

DELAYTIME7:

LOOPDELAYTIME7

JMPSHANSUO

LIANG:

MOVBYTEPTRSAVE_YELLOW_DX,0EH

MOVBYTEPTRSAVE_YELLOW_NB,0EH

JMPYANSHI

UNFAIR:

DELAY8:

LOOPDELAY8

MOVAX,03H;

检查鼠标左键是否按下

INT33H

TESTBX,0000000000000001B;

不为零表示按下了鼠标左键

JNZAUTO

MOVBYTEPTRSAVE_RED_DX,04H;

东西方向红灯亮

MO

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

当前位置:首页 > 外语学习 > 英语考试

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

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