All pastes #1669096 Raw Edit

Someone

public text v1 · immutable
#1669096 ·published 2009-11-13 00:04 UTC
rendered paste body
; 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