DSEG SEGMENT 'DATA'
; add your data here!
all_red dw 0000_0010_0100_1001b
all_off dw 0000_0000_0000_0000b
s1 dw 0000_1000_0110_0001b
s2 dw 0000_0100_0101_0001b
s22 dw 0000_0000_0100_0001b
s3 dw 0000_0011_0000_1100b
s4 dw 0000_0010_1000_1010b
s44 dw 0000_0010_0000_1000b
delaytime dw 10
DSEG ENDS
SSEG SEGMENT STACK 'STACK'
db 256 DUP(0)
SSEG ENDS
CSEG SEGMENT 'CODE'
START:
; set segment registers:
MOV AX, DSEG
MOV DS, AX
MOV ES, AX
; add your code here
mov ax, all_red
out 4, ax
begin:
; 情况一: 东西绿灯亮,南北红灯亮,长延时
mov ax, s1
out 4, ax
mov cx, delaytime
ls1:
CALL DELAY
loop ls1
; 情况二:东西黄灯闪烁,南北红灯亮,短延时
mov cx, 4
flash2:
mov ax, s2
out 4, ax
call delay
mov ax, s22
out 4, ax
call delay
loop flash2
; 情况三: 东西红灯亮,南北绿灯亮,长延时
mov ax, s3
out 4, ax
mov cx, delaytime
ls3:
CALL DELAY
loop ls3
; 情况四:东西红灯亮,南北黄灯闪烁,短延时
mov cx, 4
flash4:
mov ax, s4
out 4, ax
call delay
mov ax, s44
out 4, ax
call delay
loop flash4
jmp begin
;----------------------------------------
DELAY PROC
push cx
mov cx, 10
del:
nop
loop del
pop cx
RET
DELAY ENDP
CSEG ENDS
END START ; set entry point. |