25 4
6.4. PROGRAMOWANIE MIKROKOMPUTERÓW
Dla połączonego i przetestowanego systemu mikroprocesorowego (mikrokomputera) trzeba napisać program czyniący go żądanym układem cyfrowym. Programowanie Jest sztuką, w której nabiera się biegłości uruchamiając własne lub analizując cudze poprawne programy. Zazwyczaj Jego celem Jest napisanie programu rozwiązującego postawione zadanie w minimalnym czasie lub przy minimalnej pojemności pamięci. Tutaj ograniczymy się zasadniczo do pierwszego stopnia wtajemniczenia, omawiając na przykładach zagadnienia elementarne.
6.4.1. Programy w Języku maszynowym
Program rozumiany i bezpośrednio realizowany przez jj.P 8080 ma postać sekwencji 8-bitowych liczb dwójkowych, będących zakodowanymi rozkazami z podanej poprzednio listy. Jak pamiętamy, program taki nazywamy programem w Języku maszynowym. Jego przygotowanie Jest bardzo uciążliwe i znacznie wygodniej Jest posługiwać się symbolami literowymi, będącymi mnemoniczny-mi skrótami nazw rozkazów. Większość rozkazów oprócz swego symbolu wymaga podania operandów (rejestrów, adresów, danych itp.). Operandy te wpisujemy dużymi literami lub liczbami w miejsce ich symboli podanych w liście rozkazów małymi literami. Liczby możemy podawać w kodzie dziesiętnym lub szesnastkowym, w tym ostatnim przypadku dodając po liczbie literę H (He-xadecimal). Poniżej podano przykłady symbolicznego zapisu rozkazów i od-
powiadających mu liczb dwójkowych. | |
M0V A, B |
01111000 |
ADI 5 |
11000110 00000101 |
JZ 00C8H |
11001010 |
* |
11001000 00000000 |
LXI H.27AEH |
00100001 00100111 10101110 |
Program napisany w postaci symbolicznej musi być przed wprowadzeniem do pamięci komputera zamieniony na liczby dwójkowe. Jest to operacja bar-r-dzo prosta, bowiem każdemu rozkazowi zapisanemu w postaci symbolu i operandów odpowiadają Jedna, dwie lub trzy liczby dwójkowe wg ustalonego przepisu. Tłumaczenia dokonuje zazwyczaj odpowiednio zaprogramowany komputer.
Przed napisaniem programu wygodnie Jest przedstawić algorytm rozwiązania w postaci tzw. sieci działać. Sieć działań Jest diagramem opisującym przebieg wykonywania programu w czasie. Podstawowe symbole występujące w sieci działań przedstawiono na rys. 6.10.
Sieć działań dekomponuje postawione zadanie na zespół podzadań, które łatwiej ogarnąć myślowo, a więc łatwiej zaprogramować. Oczywiście można tworzyć kolejne, coraz bardziej szczegółowe wersje sieci działań. Procesu tego nie opłaca się jednak posuwać za daleko, gdyż narysowanie sieci
CUD
CU
XV
o
OINACIENIC MIEJSCA ftOlPOCt^CłA, lAKONCUM*. LUB PftttftWANIA WKOKWANIA PROGRAMU
WPAOWAOIENif LUB WttROWAMSHIt DANYCH
OPERACJA LUB GRUPA OPERACJI, NR UC1EN1C , PRUSYtANIC
ROZGAtElUNlE. 1ALCZNU ,00 SPEŁNIENIA WARUNKU WPISANEGO V ROMA PROGRAM MA 8*Ć KONTYNUOWANY W JEDNYM l KIERUNKÓW*
Rys. 6.10, Ważniejsze symbole występujące w sieci działań
d2iałań, z której jednoznacznie wynikają poszczególne rozkazy programu jest co najmniej tak sauno pracochłonne jak jego bezpośrednie napisanie. Stąd też, najczęściej sieć działań zajmuje się tylko podstawowymi operacjami logicznymi i arytmetycznymi programu nie wnikając w szczegóły i stanowi pomost pomiędzy słownym opisem metody rozwiązania zadania a opisem formalnym, jakim jest program.
Przykład 6.1
Przygotować program dla ^.P 8080 czyniący go układem kombinacyjnym realizującym funkcję logiczną 8 zmiennych:
f (x1,x2,x^lxiftx5,x6,x7,x6) = x1x2xZf + x2x6x7xQ + x^
Procesor wczytuje wartość 8 zmiennych -r Xg rozkazem IN, a wynik wyprowadza na zewnątrz rozkazem OUT.
Sieć działań dla tego zadania może mieć postać jak na rys, 6.11. Przystępując do pisania programu zastanówmy się, jak sprawdzać warunki podane w blokach rozgałęzień. Np. sprawdzenie warunku = 1 i x2 = 1 i x^=0 wymaga porównania bitów reprezentujących zmienne x^,x2,x^ z liczbą odniesienia 110. Ponieważ rozkazy CŁIP i CPI działają na wszystkich ośmiu bitach, nieistotne w danym przypadku bity należy zamaskować i porównywać liczby x1x2Zx^ZZZZ i 11Z0ZZZZ, gdzie Z oznacza bit zamaskowany. Przy operacji porównania maskowanie polega na zrównaniu odpowiadających sobie bitów, np, przez ich wyzerowanie. Oznacza to, że dla sprawdzenia rozpatrywanego warunku należy wczytaną liczbę pomnożyć logicznie przez 11010000 a następnie porównać z liczbą 11000000. Program działający według tej zasady wygląda następująco.