📄 1二极管.asm
字号:
assume cs:code
code segment public
org 100h
start: mov al,0ffh ;先让灯灭(发光二极管是共阴的)
mov dx,04b0h
out dx,al
again: mov dx,04a0h ;读开关状态
in al,dx
mov ah,al ;将开关状态存储在ah中
cmp ah,0feh ;判断开关K0是否关上
jz next1 ;开关K0关上,执行next1
again1: cmp ah,0fdh ;开关K0断开,接着判断K1是否关上
jz next2 ;开关K1关上,执行next2
mov al,0ffh ;开关K0,K1都不单独开上,灯灭
mov dx,04b0h
out dx,al
jmp again ;接着在查询开关状态
next3: mov al,0ffh
mov dx,04b0h
out dx,al
mov dx,04a0h
in al,dx
mov ah,al
mov al,bl ;将开关状态变化的数据给al,在这个基础上灯的状 ;态再继续变化
cmp ah,0feh
jz next1
again2: cmp ah,0fdh
mov al,bl
jz next2
jmp next3
next1: mov dx,04b0h ;输出
out dx,al
call delay ;延时
push ax ;将ax入栈
mov dx,04a0h ;随时读开关状态,以便及时发生变化
in al,dx
mov ah,al
cmp ah,0feh
pop ax
mov bx,ax ;保存状态发生变化时灯灭的数据
jnz again2
rol al,1 ;通过左移实现灯K0-K7方向亮
jmp next1
next2:mov dx,04b0h ;输出
out dx,al
call delay ;延时
push ax ;将ax入栈
mov dx,04a0h ;随时读开关状态,以便及时发生变化
in al,dx
mov ah,al
cmp ah,0fdh
pop ax
mov bx,ax ;保存状态发生变化时灯灭的数据
jnz next3
ror al,1 ;通过右移实现灯K7-K0方向亮
jmp next2
delay proc
timer =1
push bx
push cx
mov bx,timer
lop1: xor cx,cx
lop2: loop lop2
dec bx
jnz lop1
pop cx
pop bx ;延时
ret
delay endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -