汇编语言实现通过8255A和4个开关控制实现8个LED灯全亮、全灭、从左至右、从右至左跑马灯式点亮
汇编代码及解释如下:
1 .MODEL TINY 2 .STACK 100 3 .DATA 4 .CODE 5 start: 6 ; set segment registers: 7 mov bl,0feh ;先将bl通用寄存器的值置为1111 1110(实验室的实验箱中电路没有设置反相器,故设为7个1,1个0) 8 mov dx,273h ;将273h送入地址寄存器dx,根据课本P169中8255A的端口操作表,由于273h中3对应0011,故A1A0=11,对应数据总线->控制寄存器,即为写入控制字做准备 9 mov al,10000010b ;将1000 0010写入al通用寄存器中 10 out dx,al ;将1000 0010设为8255A的控制字,根据课本P171中8255A的方式选择控制字可知D7...D1D0=1...10,故B口输入C口输出(以上四行为8255A的初始化程序) 11 go: mov al,0ffh ;初始化al通用寄存器,初始化其值为1111 1111 12 mov dx,272h ;将272h送入地址寄存器dx,根据课本P169中8255A的端口操作表,由于272h中2对应0010,故A1A0=10,对应C口 13 out dx,al ;将al中的数据写入dx对应端口(即将al中数据写入C口) 14 mov dx,271h ;将271h送入地址寄存器dx,根据课本P169中8255A的端口操作表,由于271h中1对应0010,故A1A0=01,对应B口 15 in al,dx ;将al中的数据读入dx对应端口(即将al中数据读入B口) 16 and al,0fh ;对al寄存器中的8位值进行and(与)运算,只取后4位 17 cmp al,0eh ;cmp比较al中的值和0e,若相等,则zf标志位为1,执行jz指令 18 jz st1 19 cmp al,0dh 20 jz nd1 21 cmp al,0bh 22 jz rd1 23 cmp al,07h 24 jz th1 25 jmp go 26 st1: mov bl,0feh 27 mov dx,272h 28 mov al,00h 29 out dx,al 30 jmp go 31 nd1: mov bl,0feh 32 mov dx,272h 33 mov al,0ffh 34 out dx,al 35 jmp go 36 rd1: mov dx,272h 37 mov al,bl 38 out dx,al 39 rol bl,1 ;rol中的l代表left,rol为循环左移指令,移位后经过ffff次loop再次jmp到go段重新执行,下同 40 mov cx,0ffffh 41 lo1:loop lo1 42 jmp go 43 th1: mov dx,272h 44 mov al,bl 45 out dx,al 46 ror bl,1 47 mov cx,0ffffh 48 lo2:loop lo2 49 jmp go 50 end start