彙編實驗 (8086) 8255

2021-09-03 05:15:03 字數 3983 閱讀 9045

; 8255 pa輸入 pb輸出

; 連線:

; 8255 cs ---------- 埠位址 300cs

; 8255 pa7..pa0 ---- 邏輯電平開關 k7..k0

; 8255 pb7..pb0 ---- 發光二極體 l7..l0

; 執行:全速執行程式,撥動k0~k7,觀察l0~l7發光二極體顯示

cs8255   equ 0303h     ;控制口位址

porta equ 0300h ;a口位址

portb equ 0301h ;b口位址

code segment

assume cs:code

start:

mov dx,cs8255 ;8255初始化

mov al,90h

out dx,al

main: mov dx,porta ;讀pa資料

in al,dx

mov dx,portb ;資料寫pb

out dx,al

jmp main

code ends

end start

; 8255控制交通燈

; 連線:

; 8255 cs --- 埠位址 300cs

; 8255 pa0 -- 發光二極體 l1 -- a道黃燈

; 8255 pa1 -- 發光二極體 l2 -- a道綠燈

; 8255 pa2 -- 發光二極體 l3 -- a道紅燈

; 8255 pa3 -- 發光二極體 l5 -- b道黃燈

; 8255 pa4 -- 發光二極體 l6 -- b道綠燈

; 8255 pa5 -- 發光二極體 l7 -- b道紅燈

cs8255  equ 0303h    ;控制埠位址

porta equ 0300h ;a口位址

code segment

assume cs:code

start:

mov dx,0303h ;控制口位址

mov al,88h

out dx,al

mov dx,0300h ;a口位址

;a綠 b紅

mloop: mov al,011101b

out dx,al

call delayl

;;;a黃燈閃爍 b紅

mov cx,3

slp1:

mov al,011110b

out dx,al

call delays

mov al,011111b

out dx,al

call delays

loop slp1

;;;a紅燈 b道綠燈

mov al,101011b ;a紅 b綠

out dx,al

call delayl

;;; ;a道紅燈 b道黃燈閃

mov cx,3

slp2: mov al,110011b

out dx,al

call delays

mov al,111011b

out dx,al

call delays

loop slp2

jmp mloop

;;;延時子程式 delayl

delayl proc near

push cx

mov cx,0018h

dl1: call delays

loop dl1

pop cx

retdelayl endp

;;;延時子程式 delays

delays proc near

push cx

mov cx,9000h

loop $

pop cx

retdelays endp

code ends

end start

;a口輸出,b口輸入

; 8255 cs --- 埠位址 300cs

; 8255 pa0 -- 發光二極體 l1 -- a道黃燈

; 8255 pa1 -- 發光二極體 l2 -- a道綠燈

; 8255 pa2 -- 發光二極體 l3 -- a道紅燈

; 8255 pa3 -- 發光二極體 l5 -- b道黃燈

; 8255 pa4 -- 發光二極體 l6 -- b道綠燈

; 8255 pa5 -- 發光二極體 l7 -- b道紅燈

; 8255 pb0- 低電平

; 8255 pb1 -低電平

cs8255 equ 0303h

porta equ 0300h

portb equ 0301h

code segment

assume cs:code

start:

;8255初始化

mov dx,cs8255

mov al,82h;a口輸出 b口輸入

out dx,al

main:

;讀b口資料

mov dx,portb

in al,dx

;k0按下 (有消防車或者救護車經過)

cmp al,00000001b

jz red_all

jmp yelloe_all

jmp main

;;;;;;;;;;;;;;;;;;;;;;;;;;;;緊急情況下全亮紅燈;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

red_all:

mov dx, porta

mov al,011011b

out dx,al

jmp  main 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;黃燈;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

yelloe_all:

mov dx,0300h ;a口位址

;a綠 b紅

mloop: mov al,011101b

out dx,al

call delayl

;;;a黃燈閃爍 b紅

mov cx,3

slp1:

mov al,011110b

out dx,al

call delays

mov al,011111b

out dx,al

call delays

loop slp1

;;;a紅燈 b道綠燈

mov al,101011b ;a紅 b綠

out dx,al

call delayl

;;; ;a道紅燈 b道黃燈閃

mov cx,3

slp2: mov al,110011b

out dx,al

call delays

mov al,111011b

out dx,al

call delays

loop slp2

jmp mloop

;;;延時子程式 delayl

delayl proc near

push cx

mov cx,0018h

dl1: call delays

loop dl1

pop cx

retdelayl endp

;;;延時子程式 delays

delays proc near

push cx

mov cx,9000h

loop $

pop cx

retdelays endp

jmp  main 

code ends

end start

當先經過特殊車輛時,可以正常執行;然而,當先正常執行時,遇到緊急車輛,無法正常執行

彙編實驗(二)

test 和 and 區別在於不改變op1 shr 如果要多移幾次 mov cl,4 shr dl,cl 判斷陣列裡正負數 並分開存放 assume cs code,ds data data segment m db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17...

彙編實驗(三)

迴圈程式設計 1.如何輸出自定義變數2.21h中斷 1號輸入 2號輸出 乙個字元 data segment man db 0 woman db 0 count equ 10 disp db 0dh,0ah,man or woman 1 0?disp1 db 0dh,0ah,man disp2 db ...

彙編求和實驗

設在a b和d字單元中分別存放著三個數。若三個數都不是0,則求出三個數的和並存放在s單元中 若其中有乙個數為0,則把其他兩個單元也清零。如有錯誤,請各位大神指導!如下 datas segment a dw 1 b dw 2 d dw 6 count dw a 2 tip db the number ...