Skip to content

Assembler

Luka Zeljko edited this page Mar 20, 2026 · 4 revisions

Uputstvo za upotrebu Asemblera

Kod asemblera nalazi se u /software direktorijumu, sa dva fajla, /software/inc/assembler.h, koji predstavlja header fajl sa svim definicijama funkcija, strukture i uključenim bibliotekama, i /software/src/assembler.c fajl sa definicijama funkcija iz header fajla. Uz njih je dodan i Makefile.

Pokretanje

Najjednostavniji način za pokretanje jeste da se popuni /hardware/init_files/input_program.txt asemblerskim instrukcijama i zatim iz direktorijuma scripts pokrenuti python3 run.py ili python run.py. Ovom komandom se asembler kompajlira, pokreće i pokreću se svi testovi.

Drugi način je da se kompajlira i pokreće ručno:

Za kompajliranje koda može koristiti komandu:

make assembler

Iz /software/ direktorijuma čime se generiše fajl /software/obj/assembler.

Program se potom pokreće komandom:

/putanja/do/software/obj/assembler /putanja/do/input_program.txt

Asembler će tada generisati dva fajla: instruction_memory.txt, koji sadrži RISC-V instrukcije u bitskom zapisu, i expected.txt fajl koji sadrži unose sa očekivanim rezultatima, u formatu koji je definisan na sledeći način:

pc, opcode, function3, function7, rd, rs1, rs2, alu_out, wb_out, we

gdje je wb_out očekivana upisana/pročitana vrijednost kod load/store instrukcija.

Generisani fajlovi se nalaze u /hardware/init_files/.

Pisanje asemblerskog koda

Očekivani format asemblera je onaj klasični kod asemblerskih instrukcija RISC-V arhitekture.

# Primjer input.txt
add x3, x2, x1  # Sabiraju se registri x2 i x1 i rezultat se smješta u x3
addi x3, x1, 33 # Sabira se vrijednost registra x1 sa brojem 33 te se rezultat smješta u registar x3
lw x4, 3(x1)    # U registar x4 učitavaju se 4 bajta (word) iz dmem sa adrese 3+vrijednost_registra_x1
sh x2, 3(x1)    # Iz registra x2 smještaju se 2 niža bajta u dmem na adresu 3+vrijednost_registra_x1

U početku programa svi registri su nulirani, a pošto mov instruckije nisu realizovane, smještanje nekih inicijalnih vrijednosti registara moguće je instrukcijom addi, na primjer:

addi x0, x2, 33
addi x4, x2, 23
addi x2, x5, 999

Na ovaj način smo u registar x0 smjestili vrijednost 33, jer je inicijalno vrijednost x2, kao i ostalih registara, jednaka nuli, pa kada na njegovu vrijednost dodamo 33, dobijemo 33 koji se smješta u x0, tako će se na kraju ovo programa u x4 i x2 nalaziti vrijednosti 23 i 999 respektivno. Sada dalje možemo popunjavati ostale registre kao i dmem.

Takođe, može se popuniti data_memory.txt fajl iz init_files direktorijuma koji će popuniti i dmem u asembleru.

Za detaljniji primjer asemblerskog koda posjetiti input_program.txt repozitorijuma projekta.

Napomena

Instrukcije moraju poštovati priloženu sintaksu (mala slova, naziv registara počinje sa x, razmaci, zagrade i zarezi na odgovarajućim mjestima...).

Clone this wiki locally