background image

Zadania przykładowe do laboratorium z "Architektury komputerów" cz. I 

(studia niestacjonarne 2011/2012)  

 
 
1. Zmodyfikować program opracowany na zajęciach laboratoryjnych w taki sposób, by tekst 
wyświetlany  na  ekranie  był  dwukrotnie  szerszy  od  oryginalnego  (druk  rozstrzelony),  np. 
zamiast „Nazywam się ...” powinno być ”N a z y w a m  s i ę . . .”. Nie 
należy  zmieniać  sekcji  danych  programu  (część  programu  zaczynająca  się  od  dyrektywy 
.data

). 

 
 
2. Zmodyfikować podprogram wyświetlania liczb (opracowany na zajęciach laboratoryjnych) 
w  taki  sposób,  by  w  liczbie  dziesiętnej  wyświetlanej  na  ekranie  za  pomocą  funkcji 
MessageBox

 zera nieznaczące zostały zastąpione znakami gwiazdki *, np.  ****654321. 

Plik  z  rozwiązaniem  powinien  zawierać  podprogram,  program  główny  (etykieta  _main  i 
dalsze rozkazy) oraz wszystkie niezbędne dyrektywy. 
 
 
3. Zmodyfikować podprogram wyświetlania liczb (opracowany na zajęciach laboratoryjnych) 
w taki sposób, by liczba dziesiętna wyświetlana na ekranie za pomocą funkcji MessageBox 
poprzedzona  była  słowem  "Kwota  =",  np.  Kwota  =  654321.  Plik  z  rozwiązaniem 
powinien  zawierać  podprogram,  program  główny  (etykieta  _main  i  dalsze  rozkazy)  oraz 
wszystkie niezbędne dyrektywy. 
 
 
4. Opracować nową wersję podprogramu dokonującego konwersji liczby binarnej zawartej w 
rejestrze EAX na postać dziesiętną, która zostaje wyświetlona na ekranie. Nowy podprogram 
powinien wyświetlać liczbę w formacie, w którym po każdej  cyfrze wystąpi spacja, np.: 
 4 0 3 7 4 5 6 5 0 2. 
Wykorzystując  ten  podprogram,  napisać  program  w  asemblerze,  który  wyświetli  na  ekranie 
wartość  dziesiętną  liczby  binarnej  11111111111111111111111111111110  Plik  z 
rozwiązaniem  powinien  zawierać  podprogram,  program  główny  (etykieta  _main  i  dalsze 
rozkazy) oraz wszystkie niezbędne dyrektywy. 
 
 
5.  Napisać  program  w  asemblerze,  który  wczyta  jeden  wiersz  z  klawiatury  i  wyświetli  na 
ekranie liczbę znaków tego wiersza. 
 
Wskazówki: 
 
1.  W części asemblerowej zdefiniować pomocniczy, 81-bajtowy obszar danych: 
 

.data 

 

obszar 

 

db 

81 dup (?) 

 
2.  Tekst  z  klawiatury  można  wczytać  za  pomocą  funkcji  __read  (uwaga:  dwa  znaki 

podkreślenia _) .Funkcję tę na poziomie kodu w asemblerze można wywołać za pomocą 
sekwencji rozkazów 

 
 

push 81 

background image

 

push OFFSET 

obszar 

 

push 0 

 

call __read 

 

add  esp, 12 

 
3.  Należy  pamiętać,  że  funkcja  __read  zmienia  zawartości  rejestrów  procesora  (z 

wyjątkiem  EBX,  EBP,  ESI,  EDI).  W  rejestrze  EAX  zostaje  umieszczona  liczba  znaków 
wpisanego tekstu. 
 

4.  Do  wypisania  na  ekranie  liczby  znaków  wykorzystać  podprogram  opracowany  na 

zajęciach laboratoryjnych. 
 

 
 
6. Napisać program w asemblerze, który wczyta jeden wiersz z klawiatury i wyświetli go na 
ekranie za pomocą funkcji MessageBox, przy czym znaki spacji zostaną zastąpione znakami 
gwiazdki*, np. po wprowadzeniu wiersza "Ala ma kota" na ekranie powinien pojawić się 
tekst  "Ala*ma*kota  ".  Zakładamy,  że  wprowadzany  tekst  ma  dokładnie  11  znaków  (nie 
licząc kodu klawisza Enter na końcu tekstu). 
 
Wskazówki: 
 
1.  W części asemblerowej zdefiniować pomocniczy, 12-bajtowy obszar danych: 
 

.data 

 

obszar 

 

db 

12 dup (?) 

 
2.  Tekst  z  klawiatury  można  wczytać  za  pomocą  funkcji  __read  (uwaga:  dwa  znaki 

podkreślenia _) .Funkcję tę na poziomie kodu w asemblerze można wywołać za pomocą 
sekwencji rozkazów 

 
 

push 12 

 

push OFFSET 

obszar 

 

push 0 

 

call __read 

 

add  esp, 12 

 
3.  Znaki wpisane z klawiatury zostaną wprowadzone do tablicy obszar.  

 

4.  Należy  pamiętać,  że  funkcja  __read  zmienia  zawartości  rejestrów  procesora  (z 

wyjątkiem  EBX,  EBP,  ESI,  EDI).  W  rejestrze  EAX  zostaje  umieszczona  liczba  znaków 
wpisanego tekstu. 

 
 
 
7. Opracować nową wersję podprogramu dokonującego konwersji liczby binarnej zawartej w 
rejestrze EAX na postać dziesiętną, która zostaje wyświetlona na ekranie. Nowy podprogram 
powinien  przeprowadzać  konwersję  liczby  binarnej  ze  znakiem  (w  kodzie  U2)  na  postać 
dziesiętną.  Plik  z  rozwiązaniem  powinien  zawierać  podprogram,  program  główny  (etykieta 
_main

 i dalsze rozkazy) oraz wszystkie niezbędne dyrektywy. 

 

background image

Wskazówki

 
1.  Znak liczby w rejestrze EAX można sprawdzić w poniższy sposób 

or  

eax, eax 

js  

ujemna  ; skok, gdy liczba ujemna 

 

2.  Jeśli  liczba  w  rejestrze  EAX  jest  nieujemna,  to  konwersję  przeprowadza  się  w  tak  samo 

jak dla liczb bez znaku. 
 

3.  Jeśli liczba jest ujemna, to należy zmienić jej znak za pomocą rozkazu NEG i postępować 

dalej tak samo jak dla liczb nieujemnych. 
 

4.  Przed cyframi liczby należy także wyświetlić znak + lub −. 
 
 
8. Opracować nową wersję podprogramu dokonującego konwersji liczby binarnej zawartej w 
rejestrze EAX na postać dziesiętną, która zostaje wyświetlona na ekranie. Nowy podprogram 
powinien wyświetlać liczbę w formacie, w którym po każdych trzech cyfrach, począwszy od 
cyfr  najmniej  znaczących,  wystąpi  spacja,  np.  12  345  678.  Plik  z  rozwiązaniem  powinien 
zawierać  podprogram,  program  główny  (etykieta  _main  i  dalsze  rozkazy)  oraz  wszystkie 
niezbędne dyrektywy. 
 

Wskazówki

1.  Utworzyć licznik cyfr, który będzie inkrementowany po wygenerowaniu kolejnej cyfry. 

 

2.  W trakcie generowania cyfr sprawdzać, czy zawartość licznika cyfr jest podzielna przez 

3. 
 

3.  Licznik cyfr nie może być utożsamiony z indeksem używanym przy zapisie cyfr.