📄 traffic.asm
字号:
data segment
helpmess db "TRAFFIC LIGHTS$"
orientation1 db "EAST$"
orientation2 db "SOUTH$"
orientation3 db "WEST$"
orientation4 db "NORTH$"
control1 db "red&green lights time(1<=t<=9):?s$ "
control2 db "orange lights time:1s$"
control3 db "change r&g time,all red?(y/n/r):$"
k db ?
data ends
code segment
;移动当前光标
movepoint macro x,y
push ax
push bx
push dx
mov bh,0
mov dl,y
mov dh,x
mov ah,2
int 10h
pop dx
pop bx
pop ax
endm
;**************************
printfchar macro char,n
push cx
mov cx,n
mov bh,0
mov al,char
mov ah,10
int 10h
pop cx
endm
;************************
;显示字符串
putstr macro point
push dx
push ax
mov dx,point
mov ah,9
int 21h
pop ax
pop dx
endm
;**************************
colourchar macro char,n,colour
push cx
mov cx,n
mov bh,0
mov bl,colour
mov al,char
mov ah,9
int 10h
pop cx
endm
;**************************
disappear macro
push ax
push cx
mov ah,1h
mov cx,2000h
int 10h
pop cx
pop ax
endm
;**************************
recur macro
push ax
push cx
mov ah,1h
mov cx,0c0dh
int 10h
pop cx
pop ax
endm
;************************
getchar macro
;push ax 一定不能压栈,入栈
mov ah,1h
int 21h
;pop ax
endm
;************************
check macro
mov ah,0bh
int 21h
endm
;************************
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
;-----------------------------主程序开始-----------------------------
;画双横线
movepoint 12,19
printfchar '.',20
movepoint 12,46
printfchar '.',20
;
movepoint 16,19
printfchar '.',20
movepoint 16,46
printfchar '.',20
;画双竖线
mov dh,12
mov cx,10
row11: movepoint dh,38
printfchar '.',1
dec dh
loop row11
;
mov dh,16
mov cx,10
row12: movepoint dh,38
printfchar '.',1
inc dh
loop row12
;
mov dh,12
mov cx,10
row21: movepoint dh,46
printfchar '.',1
dec dh
loop row21
;
mov dh,16
mov cx,10
row22: movepoint dh,46
printfchar '.',1
inc dh
loop row22
;******************************
help: movepoint 1,10
mov dx,offset helpmess
putstr dx
;
movepoint 14,62
mov dx,offset orientation1
putstr dx
;
movepoint 24,40
mov dx,offset orientation2
putstr dx
;
movepoint 14,19
mov dx,offset orientation3
putstr dx
;
movepoint 4,40
mov dx,offset orientation4
putstr dx
;
movepoint 4,3
mov dx,offset control1
putstr dx
;
movepoint 6,3
mov dx,offset control2
putstr dx
;
movepoint 8,3
mov dx,offset control3
putstr dx
;********************************
allred: movepoint 11,42;O1,O3black
colourchar 7,1,00000000b
movepoint 17,42
colourchar 7,1,00000000b
movepoint 14,47;O2,O4black
colourchar 7,1,00000000b
movepoint 14,37
colourchar 7,1,00000000b
;
movepoint 11,40;R1,R3red
colourchar 7,1,00000100b
movepoint 17,44
colourchar 7,1,00000100b
movepoint 13,47;R2,R4red
colourchar 7,1,00000100b
movepoint 15,37
colourchar 7,1,00000100b
;********************************
yes: movepoint 4,34
mov al,0
getchar
cmp al,'1'
jb yes
cmp al,'9'
ja yes
mov k,al
jmp no
;*****************************
allred1: jmp allred
;********************************
getkey: recur
movepoint 8,35
getchar ;mov ah,1
;int 21h
cmp al,'y'
je yes
cmp al,'n'
je no
cmp al,'r'
je allred1
jne getkey
;************************
no: disappear
movepoint 11,40 ;R1,R3black
colourchar 7,1,00000000b
movepoint 17,44
colourchar 7,1,00000000b
movepoint 13,47;R2,R4black
colourchar 7,1,00000000b
movepoint 15,37
colourchar 7,1,00000000b
;
;****************
;one
movepoint 11,40;R1,R3red
colourchar 7,1,00000100b ;10000100b闪烁
movepoint 17,44
colourchar 7,1,00000100b
;
movepoint 15,47;G2,G4green
colourchar 7,1,00000010b
movepoint 13,37
colourchar 7,1,00000010b
;------------
movepoint 11,42;O1,O3black
colourchar 7,1,00000000b
movepoint 17,42
colourchar 7,1,00000000b
;
movepoint 14,47;O2,O4black
colourchar 7,1,00000000b
movepoint 14,37
colourchar 7,1,00000000b;
;---------------------------------------
call contrl
movepoint 4,34
printfchar k,1
;two
movepoint 11,42;O1,O3orange
colourchar 7,1,10001110b ;闪烁
movepoint 17,42
colourchar 7,1,10001110b
;
movepoint 14,47;O2,O4orange
colourchar 7,1,10001110b
movepoint 14,37
colourchar 7,1,10001110b
;------------
movepoint 11,40 ;R1,R3black
colourchar 7,1,00000000b
movepoint 17,44
colourchar 7,1,00000000b
;
movepoint 15,47;G2,G4black
colourchar 7,1,00000000b
movepoint 13,37
colourchar 7,1,00000000b
;------------------------------------
call delay
;call delay
;call delay
;three
movepoint 11,44;G1,G3green
colourchar 7,1,00000100b
movepoint 17,40
colourchar 7,1,00000100b
;
movepoint 13,47;R2,R4red
colourchar 7,1,00000010b
movepoint 15,37
colourchar 7,1,00000010b
;------------
movepoint 11,42;O1,O3black
colourchar 7,1,00000000b
movepoint 17,42
colourchar 7,1,00000000b
;
movepoint 14,47;O2,O4black
colourchar 7,1,00000000b
movepoint 14,37
colourchar 7,1,00000000b
;------------------------------------
call contrl
movepoint 4,34
printfchar k,1
; four
movepoint 11,42;O1,O3orange
colourchar 7,1,10001110b
movepoint 17,42
colourchar 7,1,10001110b
;
movepoint 14,47;O2,O4orange
colourchar 7,1,10001110b
movepoint 14,37
colourchar 7,1,10001110b
;------------
movepoint 11,44;G1,G3black
colourchar 7,1,00000000b
movepoint 17,40
colourchar 7,1,00000000b
;
movepoint 13,47;R2,R4black
colourchar 7,1,00000000b
movepoint 15,37
colourchar 7,1,00000000b
call delay
check
cmp al,00h
je getkey
cmp al,ffh
;******************************
delay proc near
push bx
push cx
push ax
mov bl,02
back: mov cx,33144;33144*15.08us=0.5s
;
wait1: in al,61h
and al,10h
cmp al,ah
je wait1
mov ah,al
loop wait1
;
dec bl
jnz back
pop ax
pop cx
pop bx
ret
delay endp
;*****************
contrl proc near
push cx
mov cx,0
mov cl,k
mov al,cl
next: call delay
dec cl
movepoint 4,34
printfchar cl,1
cmp cl,'0'
jnz next
pop cx
ret
contrl endp
;*******************************
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -