彙編入門 8255IO控制LED燈實驗

2021-08-19 22:06:50 字數 3546 閱讀 9160

彙編繼續,獻上8255 io控制led燈實驗**

(1)8255 a口輸出控制流水燈,b口輸入,b口最低位控制流水燈流向

;made by x-ray龍

;8255流水燈顯示實驗

ioy0 equ 3000h ;片選ioy0對應的埠始位址

my8255_a equ ioy0+00h*4 ;8255的a口位址

my8255_b equ ioy0+01h*4 ;8255的b口位址

my8255_c equ ioy0+02h*4 ;8255的c口位址

my8255_mode equ ioy0+03h*4 ;8255的控制暫存器位址

stack1 segment stack

dw 256 dup(?)

stack1 ends

data segment

la db ? ;定義資料變數

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov dx,my8255_mode ;初始化8255工作方式

mov al,82h ;工作方式0,a口輸出,b口輸入

out dx,al

mov la,01h

loop1:

mov dx,my8255_b

in al,dx ;讀b口的一位元組資料記憶體放到al中

mov bl,al

test bl,00000001b ;判斷b口最低位0或1,是0則跳c1左迴圈,是1則跳c2右迴圈

jz c1

jmp c2

c1: mov al,la ;左迴圈,用變數la來存放上一次移位後的資料

call dally ;延時,方便人眼觀察出燈的變化

mov dx,my8255_a

out dx,al

rol al,1

mov la,al

jmp c3

c2: mov al,la ;右迴圈

call dally

mov dx,my8255_a

out dx,al

ror al,1

mov la,al

jmp c3

c3: mov ah,1 ;判斷是否有按鍵按下

int 16h

jz loop1 ;無按鍵則跳回繼續迴圈,有則退出

quit: mov ax,4c00h ;結束程式退出

int 21h

dally proc near ;軟體延時子程式

push cx

push ax

mov cx,0fffh

d1: mov ax,0ffffh

d2: dec ax

jnz d2

loop d1

pop ax

pop cx

retdally endp

code ends

end start

(2) a口輸出控制led,b口輸入由開關控制高低電平,實現開關控制led燈亮滅,同時把八位led狀態回顯到螢幕

;made by x-ray龍

;8255基本輸入輸出實驗

ioy0 equ 3000h ;片選ioy0對應的埠始位址

my8255_a equ ioy0+00h*4 ;8255的a口位址

my8255_b equ ioy0+01h*4 ;8255的b口位址

my8255_c equ ioy0+02h*4 ;8255的c口位址

my8255_mode equ ioy0+03h*4 ;8255的控制暫存器位址

stack1 segment stack

dw 256 dup(?)

stack1 ends

code segment

assume cs:code

start: mov dx,my8255_mode ;初始化8255工作方式

mov al,82h ;工作方式0,a口輸出,b口輸入

out dx,al

loop1: mov dx,my8255_b ;讀b口

in al,dx

mov dx,my8255_a ;寫a口

out dx,al

mov cx,0008h

mov bl,10000000b

c1: test al,bl

jz c2

call show1 ;顯示1

c2: test al,bl

jnz c3

call show2 ;顯示0

c3: shr bl,1

loop c1

call change ;換行

mov ah,1 ;判斷是否有按鍵按下

int 16h

jz loop1 ;無按鍵則跳回繼續迴圈,有則退出

quit: mov ax,4c00h ;結束程式退出

int 21h

show1 proc near

push ax

mov ah,02h

mov dl,31h

int 21h

pop ax

ret

show1 endp

show2 proc near

push ax

mov ah,02h

mov dl,30h

int 21h

pop ax

ret

show2 endp

change proc near

push ax

mov ah,02h

mov dl,0ah

int 21h

mov ah,02h

mov dl,0dh

int 21h

pop ax

retchange endp

code ends

end start

彙編入門指南

2.介紹 常見概念 3.推薦資源 本教程按照作者親身經歷和 x86組合語言 從實模式到保護模式 寫成 為什麼要學彙編?眾所周知,彙編是比較早期的一種程式語言和低階語言,雖然比不上高階語言的可讀性和效率,但這種語言作為最接近機器碼的語言可以很好的幫助我們了解最底層相關機制。mov指令是資料傳送指令 如...

彙編入門總結(5)

四 串指令 ds si 源串段暫存器 源串變址.es di 目標串段暫存器 目標串變址.cx 重複次數計數器.al ax 掃瞄值.d標誌 0表示重複操作中si和di應自動增量 1表示應自動減量.z標誌 用來控制掃瞄或比較操作的結束.movs 串傳送.movsb 傳送字元.movsw 傳送字.movs...

mips 彙編入門 helloworld

原始碼如下 hello.s vb view plain copy text segment text globl main main execution starts here la a0,str put string address into a0 li v0,4 system call to p...