Napisati montažno kodo za nadzorni sistem semaforja z uporabo 8086?
; Določite pomnilniške naslove za nadzor semaforjev
TL_RED enako 00H
TL_RUMENA enako 01H
TL_GREEN enako 02H
TL_CONTROL enak 03H
; Določite V/I vrata za nadzor semaforjev
OUTPUT_PORT enako 04H
; Določite vrednosti zakasnitve
DELAY_TIME enako 10000
org 100H
; Glavni program se začne tukaj
glavni:
mov al, TL_RED; Inicializirajte semafor na rdečo
mov [TL_CONTROL], al
jmp zanka; Skoči na zanko
zanka:
mov al, [TL_CONTROL]; Preberite trenutno stanje semaforja
cmp al, TL_RED; Preverite, ali je na semaforju rdeča luč
je rdeča; Če je rdeče, skoči v rdeče stanje
cmp al, TL_RUMENA ; Preverite, ali je na semaforju rumena luč
je rumena; Če je rumeno, skoči v rumeno stanje
cmp al, TL_GREEN; Preverite, če je na semaforju zelena luč
je zelena; Če je zelena, skoči v zeleno stanje
rdeče:
mov al, OUTPUT_PORT; Izberite izhodna vrata za rdečo luč
ven al, 01H; Prižgi rdečo luč
zakasnitev klica; Zakasnitev za DELAY_TIME milisekunde
mov al, OUTPUT_PORT; Izberite izhodna vrata za rdečo luč
ven al, 00H; Ugasni rdečo luč
mov al, TL_RUMENA ; Status naslednjega semaforja nastavite na rumeno
mov [TL_CONTROL], al
jmp zanka; Skoči na zanko
rumeno:
mov al, OUTPUT_PORT; Izberite izhodna vrata za rumeno svetlobo
ven al, 01H; Prižgi rumeno luč
zakasnitev klica; Zakasnitev za DELAY_TIME milisekunde
mov al, OUTPUT_PORT; Izberite izhodna vrata za rumeno svetlobo
ven al, 00H; Ugasni rumeno luč
mov al, TL_GREEN; Status naslednjega semaforja nastavite na zeleno
mov [TL_CONTROL], al
jmp zanka; Skoči na zanko
zelena:
mov al, OUTPUT_PORT; Izberite izhodna vrata za zeleno luč
ven al, 01H; Prižgi zeleno luč
zakasnitev klica; Zakasnitev za DELAY_TIME milisekunde
mov al, OUTPUT_PORT; Izberite izhodna vrata za zeleno luč
ven al, 00H; Ugasni zeleno luč
mov al, TL_RED; Status naslednjega semaforja nastavite na rdečo
mov [TL_CONTROL], al
jmp zanka; Skoči na zanko
zamuda:
mov cx, DELAY_TIME; Inicializiraj števec zakasnitve
xor dx, dx; Počisti register dx
delay_loop:
zanka zakasnitev_zanka; Vrtite v zanko, dokler števec ne doseže ničle
ret