📄 exp1_1.txt
字号:
code segment
assume cs:code
start:
cli
mov cx,1
mov bx,1
mov di,1
mov al,0b0h ;8255A端口A为方式1、输入,端口B为方式0、输出
out 63h,al
mov al,09h ;PC4允许中断
out 63h,al
mov ax,0
mov ds,ax
mov ax,offset irq1 ;中断1偏移地址
add ax,2000h
mov si,09h*4
mov [si],ax
mov ax,0
mov [si+2],ax
mov ax,offset irq7 ;中断7偏移地址
add ax,2000h
mov si,0fh*4
mov [si],ax
mov ax,0
mov [si+2],ax
in al,21h
and al,7dh ;打开中断1和中断7
out 21h,al
mov dx,43h ;设定控制端口
mov al,10110100B ;写入控制字,设定8253工作在方式2,先低字节,后高字节,十进制计数
out dx,al
mov dx,42h ;设计数器2
mov al,10011010b ;写计数初值低字节
out dx,al
mov al,00101110b ;写计数初值高字节
out dx,al
mov al,11111111b ;控制灯初始化为都不亮
out 61h,al
mov al,20h
out 20h,al
a1: sti
hlt
jmp a1
irq7:
cmp bx,100
jne contiue
mov bx,1
cmp cx,45
jne count
mov cx,1 ;循环记数
count:
cmp cx,15
jbe green
cmp cx,16
je nolight
cmp cx,17
je green
cmp cx,18
je nolight
cmp cx,19
je green
cmp cx,20
je nolight
cmp cx,21
cmp cx,40
jbe red
cmp cx,42
je red
cmp cx,44
je red
nolight:
mov al,11111111B ;控制灯不亮
jmp control
green: ;控制绿灯亮
mov al,11110000B
jmp control
red: ;控制红灯亮
mov al,00001111B
jmp control
control:
inc cx ;计数器加1
out 61h,al
mov al,20h
out 20h,al
iret
contiue:
inc bx
mov al,20h
out 20h,al
iret
irq1:
cmp di,0
jne open
mov al,11110111B ;测试用
out 61h,al
mov al,08h ;PC4禁止中断
out 63h,al
; in al,21h
; and al,0ffh
; out 21h,al
; mov al,20h
; out 20h,al
mov di,1
iret
open:
mov al,11110100B ;测试用
out 61h,al
mov al,09h ;PC4允许中断
out 63h,al
; in al,21h
; and al,7dh
; out 21h,al
; mov al,20h
; out 20h,al
mov di,0
iret
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -