匯編語言實現通過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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM