西电微机原理实验三

西电微机原理实验三

实验室:EⅡ-522

实验要求
  1. 开关Yi为低电平时对应的发光二极管亮,Yi为高电平时对应的发光二极管灭。
  2. 当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。
  3. 当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
  4. 自主设计控制及显示模式,完成编程调试,演示实验结果。

我没做要求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