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 wtajemniczania» omawiając na przykładach zagadnienia elementarne.
6*4.1. Programy w języku maszynowym
Program rozumiany i bezpośrednio realizowany przez jj.P 6080 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 operaadó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 odpowiadają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 ope-randó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 tejo nie opłaca się jednak posuwać za daleko, gdyż narysowanie sieci
UJ
WPROWADZENIE LUB WYPAOWADtENIE DANYCH
OPERACJA LUB GRUPA OPERACJI , MP, LlClENlE , PRZESYŁANIE
HV
c
D
01KAC1ENIE MIEJSCA ROEPOCt^ClA , lAKONCUNO LUB PftlERWANIA WYKONWANIA PROGRAMU
TAK ROIGAŁE1IEHSE. lALEZHlt ,00 SPEŁNIENIA WARUNKU WPISANEGO
W ROMB PROGRAM MA 8VĆ KONTYNUOWANY W JEDNYM l KIERUNKÓW.
Rys. 6.10, Ważniejszo symbole występujące w sieci działań
działań, z której jednoznacznie wynikają poszczególne rozkazy programu jest co najmniej tak samo 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 (x^ ,X2 ,Xr7 ,Xg) ~ x^x+ ^2'^6^‘7'^8 + ^5^5
Procesor wczytuje wartość 8 zmiennych x^ - Xq 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 uarunku = 1 i x^ = 1 i x^=0 wymaga porównania bitów reprezentujących zmienne x^,X2,x^ % liczbą odniesienia 110. Ponieważ rozkazy CŁ!P i CPI działają na wszystkich ośmiu bitach, nieistotne w danym przypadku bity należy zamaskować i porównywać liczby x^x2Zx/fZZZZ 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.