; LabVjezba2 --_slash--
; Mnozenje 16bit x 16bit = 32bit
; prvi operand ;definiramo nazive operanada
.def op1a = R8 ;npr. .def op1a = R8 -> znaci definiramo da nam op1a
.def op1b = R9 ;predstavlja R8 (nazive mozete promjenit po volji),
; drugi operand ;...prakticno ali ne i nuzno tako da mozete i bez ovoga
.def op2a = R10 ;u programu samo zamjenite naziv sa registrom...
.def op2b = R11
; rezultat
.def rez1 = R12
.def rez2 = R13
.def rez3 = R14
.def rez4 = R15
; pomocni registri
.def pom = R16
.def pom1 = R17
; sa "ldi" postavljamo vrijednosti u registre
; napomena: pom(R16) registar nam treba iz razloga sto se
; se vrijednosti mogu direktno postavljati od
; 16. registra nagore pa kopiramo sadrzaj pom u operatore
; "mov" kopira sadrzaj "pom" u registar operanda
ldi pom, 0x0B
mov op1a, pom ; op1a(visi reg)= 0x0B = 0000 1011
ldi pom, 0xAA
mov op1b, pom ; op1b(nizi reg) = 0xAA = 1010 1010
ldi pom, 0x37
mov op2a, pom ; op2a(visi reg) = 0x37 0011 0111
ldi pom, 0x55
mov op2b, pom ; op2b(nizi reg) = 0x55 0101 0101
; sadrzaji registara mozete promjenit po volji
clr pom ; isprazni registre
clr pom1 ; nuzno ako vise put zaredom zelite pokrenuti
clr rez1 ; program, dakako onda uklonite petlju kraj
clr rez2 ; inace mozete izbrisati
clr rez3
clr rez4
bin_djeli:
; djeli drugi operand s 2
clc ; clear carry
ror op2a ; op2a(visi reg) -> desno (djeljenje s 2)
ror op2b ; op2b(nizi reg) -> desno
brcc bin_mnozi ; ako nema c onda 1.operand ->ljevo
; ako ima dodaj 1.operand rezultatu
dodaj_rez:
; spremanje rez u 32bit
add rez1,op1b ; za prvi (najnizi reg) nam ne treba "adc" jer nemora dodavat
adc rez2,op1a ; carry ali drugi ce vjerovantno pa zato adc koji dodaje
adc rez3,pom ; carry iz prethodnog zbroja
adc rez4,pom1
bin_mnozi: ; mnozi prvi operand s dva
rol op1b ; op1b(nizi reg) -> ljevo
rol op1a ; op1a(visi reg) -> ljevo + c
rol pom ; pomoci reg -> ljevo +c
rol pom1 ; pomocni reg2 -> ljevo +c
; napomena koristimo 2 dodatna registra jer ce 1,opernad
; "guranjem" u ljevo postati 32 bitan broj
tst op2a ; testiraj op2a,op2b=0?
brne bin_djeli
tst op2b
brne bin_djeli ; ako nije vrati na pocetak
kraj: ; kraj - endless loop
rjmp kraj