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.

  1. Napišite program arith.asm, ki za izračun uporabi aritmetične ukaze z neposrednim naslavljanjem.
  2. Napišite program arithr.asm, ki za izračun uporabi aritmetične ukaze z registrskim naslavljanjem. Vsakega od x oz. y berite le enkrat, vsakega od sum, diff, prod, quot in mod zapišite le enkrat.

Izračun polinoma

V tej nalogi izračunamo vrednost polinoma x⁴+2x³+3x²+4x+5 v točki x=2.

  1. Napišite program poly.asm, ki vrednost izračuna „klasično“ (vsak člen posebej).
  2. 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.

  1. Nato izračunajte vrednost polinoma v nekaj točkah, npr. x ∈ {0, 5, 42}.
  2. 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
Zadnja sprememba: sreda, 6. november 2024, 14.05