⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiaotongdeng.asm

📁 一个基于DOS环境下模拟交通灯运行环境程序,在大3个微机原理课程设计时做的.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
STACK         SEGMENT STACK
DW            128      DUP(?)
STACK         ENDS

DATA          SEGMENT
MESSAGE0      DB      '****************************WELCOM!TEACHER!****************',13,10,'$'
MESSAGE1      DB      '--------press enter key,9 seconds delay time.--------',13,10,'$'
MESSAGE2      DB      '********press Space key,5 seconds delay time.********',13,10,'$'
INPUT         DB      '--------INPUT YOUR KEY TO SELECT DELAY TIME:','$'
DATA          ENDS

CODE          SEGMENT
              ASSUME   SS:STACK,DS:DATA,CS:CODE
MAIN:         MOV      AX,DATA
              MOV      DS,AX
              MOV      AX,STACK
              MOV      SS,AX
              
;清除屏幕,卷动整个屏幕
;-------------------------------------------------------------------------------------------
              MOV      AX,0600H
              MOV      BH,04H
              MOV      CX,0
              MOV      DX,184FH
              INT      10H
;定位初始光标位置:0行0列
;-------------------------------------------------------------------------------------------
              MOV      AH,02H                   
              MOV      BH,0
              MOV      DH,0                   
              MOV      DL,0
              INT      10H
;输出提示信息
;-------------------------------------------------------------------------------------------
              MOV      BX,OFFSET MESSAGE0
              MOV      AH,9                    ;输出提示信息MESSAGE0
              MOV      DX,BX
              INT      21H
              MOV      BX,OFFSET MESSAGE1
              MOV      AH,9                    ;输出提示信息MESSAGE1
              MOV      DX,BX
              INT      21H
              MOV      BX,OFFSET MESSAGE2
              MOV      AH,9                    ;输出提示信息MESSAGE2
              MOV      DX,BX
              INT      21H
;提示 选择延迟时间
;------------------------------------------------------------------------------------------  
              MOV      BX,OFFSET INPUT
              MOV      AH,9                    ;输出提示信息INPUT
              MOV      DX,BX
              INT      21H
;空格键:延迟5秒,回车键:延迟9秒
;------------------------------------------------------------------------------------------
              MOV      AH,0
              INT      16H
              CMP      AL,20H
              JZ       FIVE
              CMP      AL,0DH
              JZ       NINE
FIVE:         MOV      AL,35H
              MOV      CL,AL
              CALL     DISPCHR
              JMP      Initial
NINE:         MOV      AL,39H
              MOV      CL,AL
              CALL     DISPCHR
              JMP      Initial
;交通灯 全部灯红 初始化状态
;------------------------------------------------------------------------------------------
Initial:      CALL     NORTH_RED
              CALL     WEST_RED
              CALL     EAST_RED
              CALL     SOUTH_RED
;延迟5秒或者9秒
;------------------------------------------------------------------------------------------ 
DELAY1:       CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CMP      AL,30H
              JZ       STATES1
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
;状态1:南北绿灯,东西红灯
;------------------------------------------------------------------------------------------ 
 STATES1:     CALL     NORTH_GREEN
              CALL     SOUTH_GREEN
;延迟5秒或者9秒
;------------------------------------------------------------------------------------------  
DELAY2:       MOV      AL,CL
              CALL     DISPCHR
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR

              CMP      AL,30H
              JZ       STATES2
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
;状态2:东西绿灯,南北红灯
;------------------------------------------------------------------------------------------  
STATES2:      CALL     NORTH_RED
              CALL     SOUTH_RED
              CALL     EAST_GREEN
              CALL     WEST_GREEN
;延迟5秒或者9秒
;------------------------------------------------------------------------------------------             
DELAY3:       MOV      AL,CL
              CALL     DISPCHR
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR

              CMP      AL,30H
              JZ       STATES3
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
;状态2:东西红灯,南北绿灯
;------------------------------------------------------------------------------------------ 
STATES3:      CALL     WEST_RED
              CALL     EAST_RED  
              CALL     SOUTH_GREEN
              CALL     NORTH_GREEN
;延迟5秒或者9秒
;------------------------------------------------------------------------------------------
DELAY4:       MOV      AL,CL
              CALL     DISPCHR
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR

              
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR

              CMP      AL,30H
              JZ       CIRCULATION

              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
              CALL     DELAY
              DEC      AL
              CALL     DISPCHR
;检测有没有 空格键盘输入
;------------------------------------------------------------------------------------------ 
              MOV      AH,0BH
              INT      21H
              CMP      AL,0FFH                   ;检测键盘是否  有小写r键 输入?
              JNZ      CIRCULATION               ;没有,则循环 状态

              JMP      MAIN                      ;有,则重载   程序

CIRCULATION:  JMP      STATES1
;下面全部为子程序
;-------------------------------------------------------------------------------------------

;*******************************************************************************************
NORTH_RED     PROC     NEAR                      ;*****北红*****
              PUSH     AX
	      PUSH     BX
	      PUSH     CX
	      PUSH     DX
	      PUSHF

              MOV      AH,02H                    ;交通北方向 光标定位
              MOV      BH,0
              MOV      DH,4                      ;4行40列
              MOV      DL,40
              INT      10H
          
              MOV      AH,09H                    ;交通北方向图形输出
              MOV      AL,219
              MOV      BH,0
              MOV      BL,04H                    ;黑底红字(0000 0100)
              MOV      CX,3
              INT      10H

              MOV      AH,02H   
              MOV      BH,0
              MOV      DH,5                       ;5行40列
              MOV      DL,40
              INT      10H

              MOV      AH,09H    
              MOV      AL,219
              MOV      BH,0
              MOV      BL,04H   
              MOV      CX,3
              INT      10H
              
              POPF
	      POP      DX
	      POP      CX
	      POP      BX
	      POP      AX
	      RET
NORTH_RED     ENDP
;*******************************************************************************************
WEST_RED      PROC     NEAR                       ;*****西红*****
              PUSH     AX
	      PUSH     BX
	      PUSH     CX
	      PUSH     DX
	      PUSHF

              MOV      AH,02H                     ;交通西方向 光标定位
              MOV      BH,0
              MOV      DH,10                      ;10行1列      
              MOV      DL,1
              INT      10H

              MOV      AH,09H                     ;交通西方向图形输出
              MOV      AL,219
              MOV      BH,0
              MOV      BL,04H   
              MOV      CX,3
              INT      10H

              MOV      AH,02H   
              MOV      BH,0
              MOV      DH,9                        ;11行1列 
              MOV      DL,1
              INT      10H

              MOV      AH,09H   
              MOV      AL,219
              MOV      BH,0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -