Građa računala

Obavijesti | O kolegiju | Materijali | Zadaci za vježbu

Zadatak 1

Pomaknite sadržaj s memorijskih lokacija 6000-6006 na lokacije 6800-6806. Sačuvajte redoslijed podataka.

Primjer

Ulaz:6000=3E2E Izlaz:6800=3E2E
6002=42A1 6802=42A1
6004=21F2 6804=21F2
6006=60A0 6806=60A0

Zadatak 2

Oduzmite vrijednost 16 bitne varijable VALUE2 s lokacije 6002 od vrijednosti 16 bitne varijable VALUE1 s lokacije 6000 i rezultat spremite u VALUE1.

Primjer

Ulaz:6000=3977 Izlaz:6000=17F5
6002=2182 6002=2182

Zadatak 3

Shiftajte vrijednost 16 bitne varijable VALUE1 sa lokacije 6000 udesno 3 bita te postavite najznačajnija 3 bita varijable VALUE2 sa lokacije 6006 na 0.

Primjer

Ulaz:6000=415D Izlaz:6000=082B
6006=C15D 6006=015D

Zadatak 4

Upišite na memorijsku lokaciju 6004 16 bitnu vrijednost dobivenu kombinacijom najmanje značajnih 4 bita bajtova s lokacije 6000-6003. Bitove upisujte od najviše značajnih do najmanje značajnih.

Primjer

Ulaz:6000=1C Izlaz:6000=1C
6001=02 6001=02
6002=06 6002=06
6003=09 6003=09
6004= 6004=C269

Zadatak 5

Memorijske lokacije 6002, 6004 i 6006 sadrže nenegativne cijele brojeve. Upišite najmanjeg na lokaciju 6000.

Primjer

Ulaz:6000= Izlaz:6000=102C
6002=9125 6002=9125
6004=102C 6004=102C
6006=7040 6006=7040

Zadatak 6

Izračunajte kvadrate 16 bitnih vrijednosti VALUE1, VALUE2 s lokacija 6000, 6002 te spremite zbroj kvadrata kao 32 bitnu vrijednost na lokaciju 6004. Koristite signed aritmetiku.

Primjer

Ulaz:6000=0007 Izlaz:6000=0007
6002=0032 6002=0032
6004= 6004=000009F5

Zadatak 7

Izračunajte faktorijelu 8 bitne varijable VALUE s lokacije 6010 pomoću tablice faktorijela FTABLE s lokacija 6000-600F. Spremite rezultat u 16 bitnu varijablu RESULT na lokaciju 6012. Pretpostavite da je VALUE vrijednost između 0 i 7.

Primjer

Ulaz:6000=0000 Izlaz:6000=0000
6002=0001 6002=0001
6004=0002 6004=0002
6006=0006 6006=0006
6008=0018 6008=0018
600A=0078 600A=0078
600C=02D0 600C=02D0
600E=13B0 600E=13B0
6010=05 6010=05
6012= 6012=0078

Zadatak 8

Izračunajte checksum niza 8 bitnih vrijednosti. Duljina niza definirana je 16 bitnom varijablom LENGTH s lokacije 6000. Početna adresa niza sadržana je u 32 bitnoj varijabli START s lokacije 6002. Spremite checksum na adresu 6006. Checksum je dan operacijom isključivo ili među svim vrijednostima.

Primjer

Ulaz:5000=28 Izlaz:5000=28
5001=55 5001=55
5002=26 5002=26
6000=0003 6000=0003
6002=00005000 6002=00005000
6006= 6006=5B

Zadatak 9

Odredite broj nula, pozitivnih (najznačajniji bit je 0) i negativnih (najznačajniji bit je jednak 1) vrijednosti u nizu 16 bitnih cijelih brojeva. Duljina niza dana je varijablom LENGTH s lokacije 6000 i početna adresa niza je sadržana u 32 bitnoj varijabli START s lokacije 6002. Broj negativnih brojeva spremite na adresu 6006, pozitivnih na adresu 6008 i broj nula spremite na adresu 600A.

Primjer

Ulaz:5000=7602 Izlaz:5000=7602
5002=8D48 5002=8D48
5004=2120 5004=2120
5006=0000 5006=0000
5008=E605 5008=E605
500A=0004 500A=0004
6000=0006 6000=0006
6002=00005000 6002=00005000
6006= 6006=0002
6008= 6008=0003
600A= 600A=0001

Zadatak 10

Pronađite najmanji element u nizu unsigned bajtnih vrijednosti. Duljina niza dana je varijablom LENGTH s lokacije 6000 dok je početna adresa dana 32 bitnom varijablom START s lokacije 6002. Spremite minimum na adresu 6006.

Primjer

Ulaz:5000=79 Izlaz:5000=79
5001=65 5001=65
5002=15 5002=15
5003=E3 5003=E3
5004=72 5004=72
6000=0005 6000=0005
6002=00005000 6002=00005000
6006= 6006=15

Zadatak 11

Odrediti broj bitova koji su jednaki 1 u 16 bitnoj varijabli NUM s lokacije 6000 i spremite rezutat na adresu 6002.

Primjer

Ulaz:6000=B794 Izlaz:6000=B794
6002= 6002=09

Zadatak 12

Odredite koji element u nizu 16 bitnih vrijednosti ima najviše bitova jednakih 1. Duljina niza dana je varijablom LENGTH s lokacije 6000 dok je početna adresa niza dana 32 bitnom vrijednosti START s lokacije 6002. Spremite element s najviše jedinica na adresu 6006. Ako više elemenata ima jednak broj jedinica onda spremite prvi takav na adresu 6006.

Primjer

Ulaz:5000=6779 Izlaz:5000=6779
5002=15E3 5002=15E3
5004=68F2 5004=68F2
5006=8700 5006=8700
5008=592A 5008=592A
6000=0005 6000=0005
6002=00005000 6002=00005000
6006= 6006=6779

Zadatak 13

Odredite duljinu ASCII poruke. Svi su znakovi 7-bitne ASCII vrijednosti sa MSB=0. 32 bitna varijabla START s adrese 6000 sadrži početnu adresu niza znakova među kojima se nalazi poruka. Početni znak poruke je $02 (STX), a krajnji $03 (ETX). Spremite duljinu poruke (broj znakova između STX i ETX) na adresu 6004.

Primjer

Ulaz:5000=47 ('G') Izlaz:5000=47 ('G')
5001=02 (STX) 5001=02 (STX)
5002=47 ('G') 5002=47 ('G')
5003=4F ('O') 5003=4F ('O')
5004=03 (ETX) 5004=03 (ETX)
6000=00005000 6000=00005000
6004= 6004=02

Zadatak 14

Pronađite u danom stringu (nizu ASCII znakova) zadnji ne "blank" znak. Početna adresa stringa sadržana je u varijabli START s adrese $6000. Kraj stringa označen je sa znakom CR ($0D). Spremite adresu zadnjeg ne "blank" znaka na adresu $6004.

Primjer

Ulaz:5000=47 ('G') Izlaz:5000=47 ('G')
5001=20 (' ') 5001=20 (' ')
5002=47 ('G') 5002=47 ('G')
5003=20 (' ') 5003=20 (' ')
5004=0D (CR) 5004=0D (CR)
6000=00005000 6000=00005000
6004= 6004=00005002

Zadatak 15

Zamijenite sve znakove poslije decimalne točke, u danom stringu koji predstavalja decimalni broj, s ASCII prazninama ("blank"). Početna adresa stringa dana je varijablom START s adrese $6000. Duljina stringa spremljena je u varijabli LENGTH s adrese $6004. Možete pretpostaviti da se string sastoji od isključivo znamenki '0',...,'9' ($30,...,$39) i decimalne točke '.' ($2E).

Primjer

Ulaz:5000=37 ('7') Izlaz:5000=37 ('7')
5001=31 ('1') 5001=31 ('1')
5002=2E ('.') 5002=2E ('.')
5003=32 ('2') 5003=20 (' ')
5004=38 ('8') 5004=20 (' ')
6000=00005000 6000=00005000
6004=0005 6004=0005

Zadatak 16

Provjerite da li su tri niza ASCII znakova jednaka. Početne adrese stringova dane su 32 bitnim varijablama START1, START2, START3 s adresa $6000, $6004, $6008. Prvi bajt svakog stringa označava duljinu tog stringa u bajtovima. Ako su stringovi jednaki postavi varijablu MATCH s adrese $600C na 0, inače postavi na -1.

Primjer

Ulaz:5000=03 Izlaz:5000=03
5001=31 ('1') 5001=31 ('1')
5002=2E ('.') 5002=2E ('.')
5003=32 ('2') 5003=32 ('2 ')
5004=03 5004=03
5005=31 ('1') 5005=31 ('1')
5006=2E ('.') 5006=2E ('.')
5007=32 ('2') 5007=32 ('2')
5008=03 5008=03
5009=31 ('1') 5009=31 ('1')
500A=2E ('.') 500A=2E ('.')
500B=39 ('9') 500B=39 ('9')
6000=00005000 6000=00005000
6004=00005004 6004=00005004
6008=00005008 6008=00005008
600C= 600C=FF

Zadatak 17

Neka su nam dana 2 stringa. Početna adresa stringova sadržana je u varijablama START1 i START2 s adresa $6000 i $6004. Početni bajt stringa označava njegovu duljinu. Dodajte drugi string prvome i zapišite novi string na adresu $6010. (Ne zaboravite i za novi string postavati prvi bajt na njegovu duljinu).

Primjer

Ulaz:5000=03 Izlaz:5000=03
5001=31 ('1') 5001=31 ('1')
5002=2E ('.') 5002=2E ('.')
5003=32 ('2') 5003=32 ('2 ')
5004=04 5004=04
5005=33 ('3') 5005=33 ('3')
5006=35 ('5') 5006=35 ('5')
5007=33 ('3') 5007=33 ('3')
5008=33 ('3') 5008=33 ('3')
6000=00005000 6000=00005000
6004=00005004 6004=00005004
6010= 6010=07
6011= 6011=31 ('1')
6012= 6012=2E ('.')
6013= 6013=32 ('2 ')
6014= 6014=33 ('3')
6015= 6015=35 ('5')
6016= 6016=33 ('3')
6017= 6017=33 ('3')

Zadatak 18

Provjerite koji je, od dana 2 stringa, leksikografski veći. Početna adresa stringova sadržana je u varijablama START1 i START2 s adresa $6000 i $6004. Stringovi imaju jednaku duljinu koja je sadržana u 16 bitnoj varijabli LENGTH s adrese $6008. Ako je prvi string veći postavite 1 na adresu $6010. Ako su stringovi jednaki postavite 0 na adresu $6010. Inače, postavite -1 na adresu $6010.

Primjer

Ulaz:5000=43 ('C') Izlaz:5000=43 ('C')
5001=41 ('A') 5001=41 ('A')
5002=54 ('T') 5002=54 ('T')
5003=42 ('B') 5003=42 ('B')
5004=41 ('A') 5004=41 ('A')
5005=54 ('T') 5005=54 ('T')
6000=00005000 6000=00005000
6004=00005003 6004=00005003
6008=0003 6008=0003
6010= 6010=01

Zadatak 19

Konvertirajte vrijednost varijable ADIGIT s adrese $6000 iz ASCII znaka u odgovarajući heksadekadski broj i spremite rezultat u varijablu HDIGIT s adrese $6001.

Primjer

Ulaz:6000=43 ('C') Izlaz:6000=43 ('C')
6001= 6001=0C

Zadatak 20

Konvertirajte vrijednost varijable CODE s adrese $6000 iz sedmosegmentnog oblika (pogledati vježbe za objašnjenje) u decimalan broj te spremite rezultat na adresu $6010.

Primjer

Ulaz:6000=4F Izlaz:6000=4F
6010= 6010=03

Zadatak 21

Konvertirajte vrijednost varijable NUMBER s adrese $6000 u BCD oblik te spremite rezultat na adresu $6010. Možete pretpostaviti da je vrijednost prirodan broj manji od 10000.

Primjer

Ulaz:6000=1C52 Izlaz:6000=1C52
6010= 6010=72
6011= 6011=50

Zadatak 22

Oduzmite dva 56-bitna broja. Prvi se broj nalazi na adresama 6000-6006, a drugi na adresama 6010-6016. Spremite sumu na adrese 6000-6006. Možete pretpostaviti da je prvi broj veći ili jednak drugom.

Primjer

Ulaz:6000=12 Izlaz:6000=00
6001=34 6001=00
6002=56 6002=00
6003=78 6003=00
6004=9A 6004=00
6005=BC 6005=00
6006=DE 6006=00
6010=12 6010=12
6011=34 6011=34
6012=56 6012=56
6013=78 6013=78
6014=9A 6014=9A
6015=BC 6015=BC
6016=DE 6016=DE

Zadatak 23

Oduzmite dva BCD broja. Duljina (u bajtovima) dana je varijablom LENGTH s adrese $6000. Najznačajniji bajt prvog broja nalazi se na adresi $6010, a najznačajniji bajt drugog broja nalazi se na adresi $6020. Spremite sumu na adresu $6010.

Primjer

Ulaz:6000=02 Izlaz:6000=02
6010=12 6010=00
6011=34 6011=00
6020=12 6020=12
6021=34 6021=34

Zadatak 24

Izračunajte najveći zajednički dijelitelj 16-bitnog cijelog broja s adrese $6000 i 16-bitnog cijelog broja s adrese $6010. Rezultat spremite na adresu $6020 kao 16-bitni broj.

Primjer

Ulaz:6000=000F (15) Izlaz:6000=000F (15)
6010=000C (12) 6010=000C (12)
6020= 6020=0003 (3)

Zadatak 25

Pretvorite 32-bitni nenegativni broj s adrese $6000 u binarni ASCII prikaz te spremite rezutat na adresu $6020. Početne nule zanemarite, a duljinu preostalog ASCII niza zapišite na adresu $6010 kao 32-bitnu vrijednost.

Primjer

Ulaz:6000=0000000A Izlaz:6000=0000000A
6010= 6010=00000004
6020= 6020=31 ('1')
6021= 6021=30 ('0')
6022= 6022=31 ('1')
6023= 6023=31 ('0')

Zadatak 26

Izbacite vrijednost, ako se vec nalazi u listi, 16 bitne varijable ITEM s adrese $6000 iz liste 16 bitnih vrijednosti. Adresa prvog elementa liste nalazi se na adresi $6010, a prvi element sadrži duljinu liste. Lista može imat više istih elemenata. U tom slučaju izbacite sve odgovarajuće.

Primjer

Ulaz:6000=D010 Izlaz:6000=D010
6010=00006020 6010=00006020
6020=0002 6020=0001
6022=D010 6022=3F3F
6024=3F3F 6024=3F3F

Zadatak 27

Dodajte vrijednost 16 bitne varijable ITEM s adrese $6000 u uzlazno sortiranu listu nenegativnih 16 bitnih vrijednosti tako da se sortiranost očuva. Ako se broj već nalazio u listi onda ga ne treba dodavati još jednom. Adresa prvog elementa liste nalazi se na adresi $6010, a prvi element liste sadrzi duljinu liste.

Primjer

Ulaz:6000=0002 Izlaz:6000=0002
6010=00006020 6010=00006020
6020=0002 6020=0003
6022=0001 6022=0001
6024=0003 6024=0002
6026= 6026=0003

Zadatak 28

Sortirajte listu 4 bitnih vrijednosti (broj se nalazi u 4 najmanje značajna bita danog bajta) uzlazno pomoću "bubble" sorta. Adresa prvog elementa liste dana je varijablom LIST s adrese $6000, a prvi element sadrzi duljinu liste (bez početnog člana koji predstavlja duljinu). Mozete pretpostaviti da će lista imati barem 2 elementa.

Primjer

Ulaz:6000=00006010 Izlaz:6000=00006010
6010=03 6010=03
6011=03 6011=11
6012=11 6012=02
6013=02 6013=03

Zadatak 29

Zbrojite sve 16 bitne vrijednosti u danoj, uzlazno sortiranoj, vezanoj listi cijelih brojeva i sumu dodajte u vezanu liste na odgovarajuće mjesto. Adresa prvog člana vezane liste nalazi se na adresi $6000. Element vezane liste sastoji se od 16 bita (vrijednost) i 32 bita (adresa sljedećeg člana). Kao NULL pokazivač možete koristiti adresu $FFFFFFFF.

Zadatak 30

Sortirajte dvostruko vezanu listu 16 bitnih cijelih brojeva uzlazno. Adresa prvog člana vezane liste nalazi se na adresi $6000. Element vezane liste sastoji se od 16 bita (vrijednost), 32 bita (adresa prethodnog člana) i još 32 bita (adresa sljedećeg člana). Kao NULL pokazivač možete koristiti adresu $FFFFFFFF.