📄 trlight2.asm
字号:
PA55 EQU 0DC00H-200H+218H
PB55 EQU 0DC00H-200H+219H
PC55 EQU 0DC00H-200H+21AH
P55CTL EQU 0DC00H-200H+21BH
data segment
message db 'Enter any key can exit to dos!',0dh,0ah,'$'
;pb db ?
data ends
STACKS segment
sta dw 50 dup(?)
STACKS ends
code segment
;main proc far
assume cs:code,ds:data,ss:STACKS
start: mov ax,data
mov ds,ax ;段初始化
mov ax,stacks
mov ss,ax
mov ah,09h
mov dx,offset message
int 21h ;显示信息
;mov dx,PB55
;in al,dx
;mov pb,al
mov al,80h
mov dx,P55CTL
out dx,al;写控制字
allred:mov dx,PB55
mov al,0FFH
;or al,0f0h
out dx,al;黄灯灭
mov dx,PC55
mov al,0f0h
out dx,al;红灯全亮,绿灯全灭
call delay_long
allow_13:mov dx,PC55
mov al,0a5h;10100101(c)
out dx,al;1,3口绿灯亮,2,4口红灯亮
call delay_long
call delay_long
call delay_long
allow_24:;or al,0f0h
;out dx,al
MOV DX,PC55
MOV AL,0F5H; 1,3绿灯灭
out dx,al
mov cx,4d
yellow_13:;mov al,pb
mov dx,PB55
MOV al,0afh
out dx,al;点亮1,3黄灯
; call delay_short
; call delay_short
; call delay_short
call delay_long
;or al,50h
MOV AL,0FFH
out dx,al;灭1,3黄灯
; call delay_short
;call delay_short
; call delay_short
call delay_long
loop yellow_13
MOV DX,PC55
MOV AL,0F0H
OUT DX,AL;红灯全亮
call delay_long
mov dx,PC55
mov al,5ah;c:01011010
out dx,al;点亮2,4绿灯,1,3红灯
call delay_long
;or al,0a0h;c:11111010
MOV AL,0FAH
out dx,al
mov cx,4d
yellow_24:mov al,5FH
mov dx,PB55
;and al,5fh;c:0101....
out dx,al
call delay_short
;or al,0f0h;c:1111....
MOV AL,0FFH
out dx,al;灭2,4黄灯
call delay_long
loop yellow_24
mov dx,PC55
mov al,0f0h;c:11110000
out dx,al;点亮4个红灯,灭4个绿灯
call delay_long
;mov ah,0bh
;mov dl,0ffh
;int 21h ;判断有无键按下
;inc al
MOV AH,01H
INT 16H
JNZ return
jmp allow_13
return:mov ax,4c00h
int 21h;返回dos
;ret
;main endp
delay_short proc near
push cx
mov cx,8000h
loop1:loop loop1
pop cx
RET
delay_short endp
delay_long proc near
push cx
mov cx,0FFFFh
loop2:call delay_short
loop loop2
pop cx
ret
delay_long endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -