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

Podobne dokumenty