📄 classdesign.asm
字号:
.model small
.stack
.data
message db '11 kinds of results to show,and all on in turn,in circles',0dh,0ah
db 'show0: All on,then all off',0dh,0ah
db 'show1: L0->L1->L2->L3->L4-L7,only one on once time',0dh,0ah
db 'show2: L7->L5->L3->L1',0dh,0ah
db 'show3: L7L5L3L1->L6L4L2L0,all odd on ,then the others all',0dh,0ah
db 'show4: L7L6->L5L4->L3L2->L1L0',0dh,0ah
db 'show5: L4L3->L5L2->L6L1->L7L0',0dh,0ah
db 'show6: L7L6L5L4->L3L2L1L0',0dh,0ah
db 'show7: L7L6L5L4->L6L5L4L3->L5L4L3L2->L4L3L2L1->L3L2L1L0',0dh,0ah
db 'show8: L7L4L3L2->L6L1->L5L0',0dh,0ah
db 'show9: L7L6L5->L4L3L2->L2L1L0',0dh,0ah
db 'show10:L7L6L5L4L3>L4L3L2L1L0',0dh,0ah
db 'please press 0-9 or a key to choose, any other key to stop',0dh,0ah,'$'
.code
.startup
call initial ;初始化8255,8253
work: mov ah,09
mov dx,offset message
int 21h ;输出提示信息
mov ah,01
int 21h ;输入字符
cmp al,'0'
je k0
cmp al,'1'
je k1
cmp al,'2'
je k2
cmp al,'3'
je k3
cmp al,'4'
je k4
cmp al,'5'
je k5
cmp al,'6'
je k6
cmp al,'7'
je k7
cmp al,'8'
je k8
cmp al,'9'
je k9
cmp al,'a'
jne workend
k10: call k10pro
jmp work
k9: call k9pro
jmp work
k8: call k8pro
jmp work
k7: call k7pro
jmp work
k6: call k6pro
jmp work
k5: call k5pro
jmp work
k4: call k4pro
jmp work
k3: call k3pro
jmp work
k2: call k2pro
jmp work
k1: call k1pro
jmp work
k0: call k0pro
jmp work
workend: ;熄灭所有的灯
mov dx,288h
mov al,0
out dx,al
.exit
initial proc
push dx
push ax
;初始化 8255
mov dx,28bh
mov al,10001001b ;89h,方式0,A口输出,C口输入
out dx,al
;初始状态,所有灯亮
mov dx,288h
mov al,0ffh
out dx,al
;初始化8253
mov dx,283h
mov al,00110110b ;36h
out dx,al
mov dx,280h
mov ax,1000
out dx,al
mov al,ah
out dx,al ;计数器0,方式3,1000
mov dx,283h
mov al,76h
out dx,al
mov ax,1000
mov dx,281h
out dx,al
mov al,ah
out dx,al ;计数器1,方式3,1000
pop ax
pop dx
ret
initial endp
k0pro proc ;全亮全灭循环
push dx
push ax
k0work:
mov dx,288h
mov al,0ffh
out dx,al
mov dx,28ah
call timedelay ;全亮0.5秒
mov dx,288h
mov al,0
out dx,al
call timedelay ;全灭0.5秒
mov ah,01h
int 16h
je k0work
pop ax
pop dx
ret
k0pro endp
timedelay proc
push dx
push bx
push ax
mov dx,28ah ;读C口
in al,dx
mov bl,al ;保存c口原来的值
loop1: in al,dx
cmp bl,al
je loop1
pop ax
pop bx
pop dx
ret
timedelay endp
k1pro proc ;L0--L7轮流亮
push dx
push ax
mov dx,288h
mov al,1
k1work: out dx,al
call timedelay
rol al,1
mov ah,01h
int 16h
je k1work
pop ax
pop dx
ret
k1pro endp
k2pro proc ;L7,L5,L3,L1奇数轮流亮
push dx
push cx
push ax
mov cl,2
mov dx,288h
mov al,80h
k2work: out dx,al
call timedelay
ror al,cl
mov ah,01
int 16h
je k2work
pop ax
pop cx
pop dx
ret
k2pro endp
k3pro proc ;全奇全偶轮流亮
push dx
push ax
mov dx,288h
mov al,0aah
k3work: out dx,al
call timedelay
ror al,1
mov ah,01
int 16h
je k3work
pop ax
pop dx
ret
k3pro endp
k4pro proc ;L7L6->L5L4->L3L2->L1L0轮流亮
push dx
push cx
push ax
mov cl,2
mov dx,288h
mov al,0c0h
k4work: out dx,al
call timedelay
ror al,cl
mov ah,01
int 16h
je k4work
pop ax
pop cx
pop dx
ret
k4pro endp
k5pro proc ;L4L3->L5L2->L6L1->L7L0轮流亮
push dx
push ax
mov dx,288h
k5work: mov al,18h
out dx,al
call timedelay
mov al,24h
out dx,al
call timedelay
mov al,42h
out dx,al
call timedelay
mov al,81h
out dx,al
call timedelay
mov ah,01
int 16h
je k5work
pop ax
pop dx
ret
k5pro endp
k6pro proc ;L7L6L5L4->L3L2L1L0轮流亮
push dx
push cx
push ax
mov cl,4
mov dx,288h
mov al,0f0h
k6work: out dx,al
call timedelay
ror al,cl
mov ah,01h
int 16h
je k6work
pop ax
pop cx
pop dx
ret
k6pro endp
k7pro proc ;L7L6L5L4->L6L5L4L3->L5L4L3L2->L4L3L2L1->L3L2L1L0轮流亮
push dx
push ax
mov dx,288h
mov al,0f0h
k7work: out dx,al
call timedelay
ror al,1
mov ah,01h
int 16h
je k7work
pop ax
pop dx
ret
k7pro endp
k8pro proc ;按颜色轮流亮
push dx
push ax
mov dx,288h
k8work: mov al,9ch
out dx,al
call timedelay ;4红灯亮
mov al,42h
out dx,al
call timedelay ;两个黄灯亮
mov al,21h
out dx,al
call timedelay ;两个绿灯亮
mov ah,01
int 16h
je k8work
pop ax
pop dx
ret
k8pro endp
k9pro proc ;红黄绿->红红红->红黄绿 轮流亮
push dx
push ax
mov dx,288h
k9work: mov al,0e0h
out dx,al
call timedelay
mov al,1ch
out dx,al
call timedelay
mov al,07h
out dx,al
call timedelay
mov ah,01
int 16h
je k9work
pop ax
pop dx
ret
k9pro endp
k10pro proc ;L7L6L5L4L3->L4L3L2L1L0轮流亮
push dx
push cx
push ax
mov cl,3
mov dx,288h
mov al,0f8h
k10work: out dx,al
call timedelay
ror al,cl
mov ah,01
int 16h
je k10work
pop ax
pop cx
pop dx
ret
k10pro endp
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -