Osnove
Izvorno kodo vseh programov dodajte v svojo shrambo. V ta namen ustvarite nov projekt. Vse programe boste oddali v okviru prve domače naloge.
SIC/XE simulator
Prenesite, namestite in preizkusite SIC/XE simulator. Pri tem lahko uporabite naslednji primer:
primer START 0
. kaj naredi naslednji programček?
first LDA #42
ADD x
STA x
. kaj dela naslednji ukaz
halt J halt
. podatki
x WORD 22
END first
- Preizkusite Start / Stop / Step.
- Oglejte si disassembly programa.
- Med izvajanjem spremenite vrednosti registrov.
- Kaj se med izvajanjem dogaja v pomnilniku?
- Na kateri lokaciji se hrani vrednost
x
?
Ukazna vrstica
Program lahko zberemo v strojno kodo tudi z ukazom
java -cp sictools.jar sic.Asm primer.asm
ki objektno kodo zapiše v datoteko primer.obj
. Poleg tega zapiše disassembly v primer.lst
, simbole in druge informacije pa v primer.log
. Uporabna je tudi opcija -obj-slack
, ki med posamezne strojne ukaze vstavti presledek za lažje branje. Vse opcije dobimo z -help
.
Program lahko z grafičnim simulatorjem poženemo z ukazom
java -cp sictools.jar sic.Sim primer.obj
Namesto strojne kode mu lahko podamo tudi izvorno kodo v zbirniku, ki jo bo ob zagonu zbral in naložil v pomnilnik. Program lahko zaženemo tudi brez grafičnega vmesnika z ukazom
java -cp sictools.jar sic.VM primer.obj
Več datotek s strojno kodo a.obj
, b.obj
in c.obj
povežemo (angl. link) v izhodno datoteko output.obj
z ukazom
java -cp sictools.jar sic.Link -o output.obj -m main a.obj b.obj c.obj
pri čemer z -m
podamo ime razdelka (angl. control section), v katerem se program začne izvajati.
Osnovna aritmetika
V tej nalogi izračunamo vsoto, razliko, zmnožek in kvocient ter ostanek pri deljenju dveh celih števil. Števili naj se nahajata na lokacijah z oznakama (angl. labels) x
in y
. Rezultate operacij zapišite na lokacije sum
, diff
, prod
, quot
in mod
, na koncu pa naj se program zacikla.
- Napišite program
arith.asm
, ki za izračun uporabi aritmetične ukaze z neposrednim naslavljanjem. - Napišite program
arithr.asm
, ki za izračun uporabi aritmetične ukaze z registrskim naslavljanjem. Vsakega odx
oz.y
berite le enkrat, vsakega odsum
,diff
,prod
,quot
inmod
zapišite le enkrat.
Izračun polinoma
V tej nalogi izračunamo vrednost polinoma x⁴+2x³+3x²+4x+5 v točki x=2.
- Napišite program
poly.asm
, ki vrednost izračuna „klasično“ (vsak člen posebej). - Napišite program
horner.asm
, ki vrednost izračuna po Hornerjevi metodi.
Primerjajte oba programa. Kateri je krajši in kateri je hitrejši?
Uporaba subrutin
Izračun polinoma iz prejšnje naloge izvedite z subrutino. Kako boste prenašali parametre? Poskrbite, da subrutina za seboj počisti, t.j. uporabljene registre pusti v originalnem stanju.
- Nato izračunajte vrednost polinoma v nekaj točkah, npr. x ∈ {0, 5, 42}.
- Točke, v katerih računate vrednost polinoma, naj bodo podane s tabelo na naslovu
in
. Rezultate izračuna zapišite v isto tabelo.
Za sprehod preko tabele uporabite zanko. Za ugotavljanje dolžine tabele (v bajtih) lahko uporabite trik z EQU
:
in WORD 0
WORD 5
...
lastin EQU *
len EQU lastin - in