Architektura komputerów II – laboratorium
Transkrypt
Architektura komputerów II – laboratorium
Architektura komputerów II – laboratorium dr inż. Grzegorz Bazydło [email protected], www.uz.zgora.pl/~gbazydlo Lista zadań nr 4 Zagadnienia Tworzenie prostych programów w języku Assembler. 1. Wybrane polecenia języka Assembler cmp A, B – porównuje A i B ustawiając odpowiednio flagi (działanie instrukcji jest identyczne jak sub A B z tą różnicą, że wynik nie jest nigdzie zapamiętywany, a mimo to ustawiane są flagi), gdzie: o A – rejestr lub adres pamięci o B – konkretna wartość, rejestr lub adres pamięci (ale tylko jeśli A również nie jest adresem pamięci) o modyfikowane flagi: CF, ZF, OF, SF, AF i PF przykład: cmp al, 0Ah jmp etykieta – wykonuje bezwarunkowy skok do etykiety o nazwie etykieta przykład: jmp koniec jWarunek etykieta – wykonuje warunkowy skok do etykiety o nazwie etykieta, gdzie jWarunek oznacza konkretny mnemonik (patrz poniższa tabela): przykład: jb A_mniejsza_od_B jWarunek Opis warunku je skok, jeśli równe Oznaczenie = Modyfikowane flagi ZF=1 jne skok, jeśli nie równe != ZF=0 ja skok, jeśli większe (bez znaku) > CF=0 i ZF=0 jna skok, jeśli mniejsze lub równe (bez znaku) ≤ CF=1 lub ZF=1 jb skok, jeśli mniejsze (bez znaku) < CF=1 jnb skok, jeśli większe lub równe (bez znaku) ≥ CF=0 Flaga ZF CF Znaczenie flagi, gdy ma ona wartość 1 wynik ostatniego działania wyniósł 0 w wyniku dodawania/odejmowania przekroczono możliwy zakres wartości zmiennej xor A, B – wykonuje operację XOR (alternatywa wykluczająca, patrz tabela poniżej) na odpowiadających sobie bitach A i B; wynik jest przechowywany w A (poprzednia wartość zostaje zamazana), gdzie: o A – rejestr lub adres pamięci o B – konkretna wartość, rejestr lub adres pamięci (ale tylko jeśli A również nie jest adresem pamięci) przykłady: xor cx, bx xor ax, ax ; wyzerowane rejestru AX A 0 B 0 A xor B 0 0 1 1 1 0 1 1 1 0 1 2. Wybrane funkcje przerwania 21h Funkcja Nazwa (wartość w AH) 01H Czytanie znaku z echem 08h Czytanie znaku 09h Wypisywanie ciągu znaków 4Ch Zakończenie programu Opis Funkcja oczekuje na znak w standardowym strumieniu wejściowym. Kiedy znak się pokaże, funkcja kopiuje go do standardowego strumienia wyjściowego. Po odebraniu znaku funkcja w rejestrze AL zwraca kod tego znaku. Funkcja czeka na znak ze standardowego strumienia wejściowego, następnie zwraca jego kod w rejestrze AL. Sam znak nie jest wyświetlany. Funkcja wysyła do standardowego strumienia wyjściowego łańcuch znaków przekazanych w DS:DX. Łańcuch ten musi być zakończony znakiem $ (dolar). Znak $ nie jest wyświetlany. Funkcja kończy wykonywanie programu zwracając jako wartość systemowej zmiennej errorlevel zawartość rejestru AL. Przykład W środowisku AsmIIEdit wprowadź i przeanalizuj poniższy program, który wyświetla na ekranie zagadkę: Kij bejsbolowy i pilka kosztuja razem 1 dolara i 10 centow. Kij jest o 1 dolara drozszy niż pilka. Ile kosztuje pilka: a) 5 centow b) 10 centow c) 1 dolara”, a następnie w zależności od wprowadzonej odpowiedzi użytkownika wyświetla komunikat „Gratulacje! Zgadles!” (użytkownik wprowadził literę „a”) lub „Nie zgadles…” (użytkownik wprowadził literę inną niż „a”). .model tiny .386 .data zagadka db "Kij bejsbolowy i pilka kosztuja razem 1 dolara i 10 centow. Kij jest o 1 dolara drozszy niż pilka. Ile kosztuje pilka:$" odpA odpB odpC odp db db db db 10, 10, 10, 10, 13, 13, 13, 13, "a) 5 centow$" "b) 10 centow$" "c) 1 dolara$" "Twoja odpowiedz: $" komunikatDobrze db 0Ah, 0Dh, "Gratulacje! Zgadles!$" komunikatZle db 0Ah, 0Dh, "Nie zgadles...$" .stack 100h .code mov ax, @data mov ds, ax xor ax, ax ; wyzerowanie rejestru AX ; wyświetlenie poszczególnych wierszy tekstu na ekranie mov dx, offset zagadka mov ah, 09h int 21h mov dx, offset odpA mov ah, 09h int 21h mov dx, offset odpB mov ah, 09h int 21h mov dx, offset odpC mov ah, 09h int 21h 2 mov dx, offset odp mov ah, 09h int 21h ; wczytanie znaku (odpowiedzi) mov ah, 01h int 21h ; wczytany kod znaku (ASCI) znajduje się w AL ; sprawdzenie, cmp al, 'a' jne zle mov dx, offset mov ah, 09h int 21h jmp koniec czy podany znak to litera ‘a’ ; jeśli to nie ‘a’ to skocz do etykiety „zle” komunikatDobrze ; skocz do etykiety „koniec” zle: mov dx, offset komunikatZle mov ah, 09h int 21h koniec: ; zakończenie programu mov ah, 4Ch int 21h end Zadanie 1 Napisz program, który wyświetli na ekranie tekst „Wpisz znak: ”, a następnie wczyta jeden znak podany przez użytkownika i zwróci jego wartość (z tabeli ASCII) jako kod zakończenia programu (do odczytania w konsoli za pomocą polecenia echo %errorlevel%). Zadanie 2 Napisz program, który wczyta jeden znak z klawiatury (0…9, A…z), a następnie sprawdzi i wyświetli na ekranie informację „To jest cyfra!” lub „To jest litera!”. Zadanie 3 Napisz program, który sprawdzi, czy podana liczba naturalna (1 ≤ a ≤ 255) jest podzielna przez 7. Liczbę wprowadź jako stałą wartość zmiennej. Zadanie 4 Napisz program, który wczyta dwie cyfry (0 ≤ a ≤ 9, 0 ≤ b ≤ 9) a następnie sprawdzi i wyświetli na ekranie tekst w postaci a<b lub a>b, gdzie a, b oznaczają wczytane cyfry np. 5<9. Zadanie 5 (domowe) Zmodyfikuj program z zadania 2 tak, aby oprócz cyfr rozpoznawał także duże i małe litery oraz znaki specjalne (znaki inne niż cyfry i litery). Zadanie 6 (domowe) Napisz program, który wyświetli na ekranie poniższą zagadkę (użytkownik jako odpowiedź podaje literę „b” – biała lub „c” – czarna) i sprawdza poprawną odpowiedź użytkownika (w zagadce usunięto już polskie znaki). Krol mial trzech medrcow: Wysokiego, Sredniego i Niskiego. Zadal im zagadke: Mam piec czapek - 2 czarne i 3 biale. Kazdemu z was naloze jedna i kaze zgadywac jaki kolor ma czapka na jego glowie. Krol ustawil medrcow w kolejnosci: Niski, Sredni, Wysoki w ten sposob, aby Wysoki widzial dwoch pozostalych, a Sredni tylko Niskiego. Zgadujcie! - krzyknal. Wysoki odpowiedzial: Nie wiem! Sredni odpowiedzial: Nie wiem! Niski odpowiedzial... Pytanie: co odpowiedzial? Twoja odpowiedz (b/c): 3