西电微机原理实验三
实验室:EⅡ-522
实验要求
- 开关Yi为低电平时对应的发光二极管亮,Yi为高电平时对应的发光二极管灭。
- 当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。
- 当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
- 自主设计控制及显示模式,完成编程调试,演示实验结果。
我没做要求1,当开关Yi不是全为低电平和高电平时,发光二极管Qi按1423的顺序点亮,这里可以按照自己的需求改,可以把剩下的四个也加上去,顺序也可以改,如果你要做要求1,开关Yi为某特定值时跳转Light更好(在实验四中实现类似功能)
代码
IO244 equ 230h ;244
IO273 equ 230h ;273_stack segment stackdw 100 DUP(?)
_stack ends_data segment word public 'DATA'
_data endscode segment
main procassume cs:code,ds:_data,ss:_stack; 初始化寄存器mov ax,_datamov ds,axmov bx,0fefehstart: mov dx,IO244 ; 读取244引脚的输入值in al,dxmov ah,alcmp al,0ffh ; 判断输入值是否为0xff,如果不是,则进行翻转操作 jnz Next0call ROLeft ; 调用ROLeft函数进行左移操作jmp Next2Next0: cmp al,0 ; 判断输入值是否为0,如果不是,跳转Next1 jnz Next1call RORight jmp Next2Next1: call LightNext2: call Delayjmp start
main endpROLeft proc near; 左移bl寄存器,并将结果存储在al寄存器中rol bl,1mov al,bl; 输出左移后的值到273引脚mov dx,IO273out dx,axret
ROLeft endpRORight proc near; 右移bl寄存器,并将结果存储在al寄存器中ror bl,1mov al,blmov dx,IO273out dx,axret
RORight endpLight proc nearxor bh,1 ;bx高八位与1异或mov al,bhmov dx,IO273out dx,axcall Delayxor bh,8 mov al,bhmov dx,IO273out dx,axcall Delayxor bh,2 mov al,bhmov dx,IO273out dx,axcall Delayxor bh,4 mov al,bhmov dx,IO273out dx,axcall Delayret
Light endpDelay proc near xor cx,cxdelay1: loop delay1ret
Delay endp
code ends
END main