; 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