Marcin Stępniak Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów 1. Informacje Poniższe laboratoria zawierają podsumowanie najważniejszych informacji na temat symulatora SMS32. Zadania do rozwiązania będą polegały na zaimplementowaniu wybranych algorytmów z wykorzystaniem zdobytej dotychczas wiedzy. Tabela 1. Rejestry symulowanego mikroprocesora Rejestr AL, BL, CL i DL IP (ang. Instruction pointer) SR (ang. Status Register) SP (ang. Stack Pointer) Funkcja Rejestry ogólnego Zawiera adres instrukcji, która będzie wykonywana lub jest aktualnie wykonywana. Rejestr ten zawiera flagi, które informują o stanie procesora. Flaga "Z" (zera) jest ustawiana na jeden, jeśli obliczenia dały wynik zerowy. Flaga "S" (znaku) jest ustawiana na jeden, jeśli obliczenia dały wynik ujemny. Flaga "O" (przepełnienia) jest ustawiana, jeśli wynik był zbyt duży, aby zmieścić się w rejestrze. Flaga "I" (przerwania) jest ustawiana, jeśli przerwania są włączone. Wskaźnik stosu jest adresem kolejnego wolnego miejsca na stosie. 1
Tabela 2. Podstawowe instrukcje symulowanego mikroprocesora Instr. Operand A Operand B Działanie MOV ADD SUB MUL DIV INC DEC CMP lub adres w pamięci. konkretna wartość, rejestr ogólnego lub adres w pamięci rejest rejest rejesti rejestr konkretna wartość, rejestr lub adres pamięci kopiuje B do A. Operand docelowy i źródłowy nie mogą być jednocześnie adresami w pamięci ani rejestrami. sumuje A i B; wynik odejmuje B od A; wynik mnoży A i B; wynik dzieli A przez B; wynik zwiększa A o 1 zmniejsza A o 1 porównuje A i B ustawiając odpowiednio flagi IN numer portu odczytuje dane z portu A i umieszcza je w rejestrze AL OUT numer portu wysyła dane z rejestru AL do portu A 2
Tabela 3. Instrukcje dla operacji bitowych Instr. Operand A Operand B Działanie AND rejestr ogólnego OR rejestr ogólnego XOR rejestr ogólnego NOT rejestr ogólnego ROL rejestr ogólnego ROR rejestr ogólnego SHL rejestr ogólnego SHR rejestr ogólnego konkretna wartość lub rejestr konkretna wartość lub rejestr konkretna wartość lub rejestr Wykonuje operację A AND B. Wynik zapisuje w A. Wykonuje operację A OR B. Wynik zapisuje w A. Wykonuje operację A XOR B. Wynik zapisuje w A. Wykonuje negację (odwraca wszystkie bity) na rejestrze. Obraca bity w rejestrze w lewo. Obraca bity w rejestrze w prawo. Przesuwa bity w rejestrze w lewo. Przesuwa bity w rejestrze w prawo. Tabela 4. Instrukcje skoku symulowanego mikroprocesora Instr. JMP JZ JNZ JS JNS JO JNO Działanie skok bezwarunkowy; zawsze skacze do wskazanej etykiety skacze do wskazanej etykiety jeżeli flaga "Z" jest ustawiona skacze do wskazanej etykiety jeżeli flaga "Z" nie jest ustawiona skacze do wskazanej etykiety jeżeli flaga "S" jest ustawiona skacze do wskazanej etykiety jeżeli flaga "S" nie jest ustawiona skacze do wskazanej etykiety jeżeli flaga "O" jest ustawiona skacze do wskazanej etykiety jeżeli flaga "O" nie jest ustawiona Instrukcja CMP AL,BL Tabela 5. Przykłady działania instrukcji CMP Działanie Ustawia flagę Z jeżeli AL = BL Ustawia flagę S jeżeli AL < BL CMP BL,13 Ustawia flagę Z jeżeli BL = 13 Ustawia flagę S jeżeli BL < 13 CMP CL,[20] Ustawia flagę Z jeżeli CL = [20] Ustawia flagę S jeżeli CL < [20] 3
Tabela 6. Instrukcje operujące na stosie Instr. Operand A Działanie PUSH POP PUSHF POPF odkłada (kopiuje) wartość rejestru na sos zdejmuje wartość ze stosu i zapisuje do rejestru odkłada wartość rejestru flag na stos pobiera wartość rejestru flag ze stosu Tabela 7. Instrukcje (dyrektywy asemblera) związane z organizacją danych Instr. Operand A Działanie ORG adres dyrektywa assemblera powodująca, że kod będzie generowany od adresu A DB wartość bajtu zapisuje wartość podaną jako operand A w pamięci RAM DB "tekst" zapisuje kody ASCII podanego ciągu znaków w kolejnych komórkach pamięci Tabela 8. Instrukcje związane z implementacją procedur Instr. Operand Działanie CALL adres procedury zapisuje wartość rejestru IP na stosie i skacze do adresu wskazanego przez operand RET przywraca rejestr IP ze stosu i skacze pod adres tam zawarty Tabela 9. Instrukcje związane z przerwaniami Instr. Operand Działanie INT IRET STI CLI numer przerwania - w symulatorze odpowiada on adresowi komórki pamięci z wektorem przerwania Zapisuje wartość rejestru IP na stosie, odczytuje adres procedury obsługi przerwania z wektora i skacze do tego adresu. Powrót z procedury przerwania. Przywraca rejestr IP ze stosu i skacze pod adres tam zawarty. Ustawia flagę I. Dzięki temu przerwania sprzętowe są obsługiwane. Czyści flagę I. Bez ustawionej flagi przerwania sprzętowe są ignorowane. 4
Tabela 10. Dostępne urządzenia i numery ich portów Numer portu Urządzenie 00 Wczytywanie znaków 01 Światła drogowe 02 Wyświetlacz siedmiosegmentowy 03 Grzałka i termostat 04 Labirynt 05 Silnik krokowy 06 Winda Tabela 11. Przerwania generowane przez urządzenia Numer przerwania Urządzenie 02 Zegar 03 Klawiatura 04 Klawiatura numeryczna 1.1. Dodatkowe informacje 1. http://www.softwareforeducation.com/sms32v50/sms32v50_ manual/index.htm 2. https://pl.wikipedia.org/wiki/algebra_boole a 3. https://pl.wikipedia.org/wiki/palindrom 2. Zadania 2.1. Zadanie 1 Napisać program realizujący funkcję minutnika. Użytkownik wprowadza liczbę sekund do odmierzenia (od 1 do 99). Program pokazuje pozostały czas na wyświetlaczu siedmiosegmentowym. Odmierzanie czasu należy zrealizować z wykorzystaniem przerwania zegarowego. Po upływie wskazanego czasu zapala się światło na sygnalizatorze. Pomocna może okazać się tablica bajtów z listingu 1 2.2. Zadanie 2 Napisać program sprawdzający czy wprowadzony z klawiatury wyraz jest palindromem. 5
Listing 1. Tablica cyfr dla wyświetlacza siedmiosegmentowego DB FA ;0 DB 0A ;1 DB B6 ;2 DB 9E ;3 DB 4E ;4 DB DC ;5 DB FC ;6 DB 8A ;7 DB FE ;8 DB DE ;9 2.3. Zadanie 3 Napisać program, który posortuje wprowadzony ciąg znaków na podstawie ich kodów. Algorytm sortowania może być dowolny. Wczytane znaki należy przechowywać w pamięci wyświetlacza VDU i w tym miejscu je sortować. Pozwoli to na obserwowanie procesu sortowania. 2.4. Zadanie dodatkowe Napisać program wykonujący mnożenie dwóch liczb wczytanych z klawiatury. Każda liczba może składać się od 1 do 10 cyfr. 6