2023年7月14日发(作者:)
汇编语⾔实现通过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...10,故B⼝输⼊C⼝输出(以上四⾏为8255A的初始化程序)11 go: mov al,0ffh ;初始化al通⽤寄存器,初始化其值为1111 111112 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 st119 cmp al,0dh20 jz nd121 cmp al,0bh22 jz rd123 cmp al,07h24 jz th125 jmp go26 st1: mov bl,0feh27 mov dx,272h28 mov al,00h29 out dx,al30 jmp go31 nd1: mov bl,0feh32 mov dx,272h33 mov al,0ffh34 out dx,al35 jmp go36 rd1: mov dx,272h37 mov al,bl38 out dx,al39 rol bl,1 ;rol中的l代表left,rol为循环左移指令,移位后经过ffff次loop再次jmp到go段重新执⾏,下同40 mov cx,0ffffh41 lo1:loop lo142 jmp go43 th1: mov dx,272h44 mov al,bl45 out dx,al46 ror bl,147 mov cx,0ffffh48 lo2:loop lo249 jmp go50 end start
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689324632a229983.html
评论列表(0条)