UL/FRI/UNI-RI/ARS1/Vaje/VajE hip

Iz E-študij, proste zakladnice študentskega znanja

< UL | FRI | UNI-RI | ARS1 | Vaje
Skoči na: navigacija, iskanje

2. Napišite zaporedje ukazov v zbirniku za procesor HIP, ki vrednost 32-bitne spremenljivke STEV1 prepiše v 32-bitno spremenljivko STEV2. Spremenljivki STEV1 in STEV2 naj bosta na naslovih od 0x400 dalje. Ukazi naj se nahajajo od naslova 0x0 naprej.


       .data 
       .org 0x400
STEV1: .word 15
STEV2: .word 10
 
 
        .text
	.org 0
	lw r1,STEV1(r0);
	lw r2,STEV2(R0)
	sw STEV2(R0),r1
	sw STEV1(R0),r2
 
	halt;




3. Napišite zaporedje ukazov v zbirniku za procesor HIP, ki zamenja vrednosti 32-bitnih spremenljivk STEV1 in STEV2. Spremenljivki STEV1 in STEV2 naj bosta na naslovih od 0x400 naprej. Ukazi naj se nahajajo od naslova 0x0 naprej.

    .data
    .org 0x400
stev1:    .word 5
stev2:    .word 3
 
    .code
    .org 0
 
	lw    r1,stev1(r0)
	lw    r2,stev2(r0)
	sw    stev2(r0),r1
	sw    stev1(r0),r2

4. Napišite zaporedje ukazov v zbirniku za procesor HIP, ki predznačeno sešteje 32-bitni spremenljivki STEV1 in STEV2, rezultat pa zapiše v 32-bitno spremenljivko REZ. Spremenljivke STEV1, STEV2 in REZ naj bodo na naslovih od 0x400 naprej. Nalogo ponovite še na primeru, če spremenljivko STEV2 odštejemo od spremenljivke STEV1.


        .data 
	.org 0x400
STEV1: .word -15
STEV2: .word -10
REZ:   .word 0
 
        .text
	.org 0
	lw r1,STEV1(r0);
	lw r2,STEV2(R0)
	add r1,r1,r2
	sw REZ(R0),r1
 
	halt;

5. Različica te naloge za nepredznačena števila

        .data 
	.org 0x400
STEV1: .word -15
STEV2: .word -10
REZ:   .word 0
 
        .text
	.org 0
	lw r1,STEV1(r0);
	lw r2,STEV2(R0)
	addu r1,r1,r2
	sw REZ(R0),r1
 
	halt;

7. Napišite zaporedje ukazov v zbirniku za procesor HIP, ki v 32-bitno spremenljivko MAX zapiše večjo od obeh vrednosti 32-bitnih spremenljivk VAR1 in VAR2. Spremenljivke hranijo predznačena števila.

        .data 
	.org 0x400
VAR1:   .word 0x44000044
VAR2:	.word 0x44000066
MAX:	.word 0
 
        .text
	.org 0
	addi r10,r0,#2
	lw r1,VAR1(R0)
	sw MAX(r0),r1
	lw r2,VAR2(r0)
	sgt r1,r2,r1
	bne r1,LOOP
 
        halt 
 
LOOP:   sw MAX(R0),r2
        halt


8. Različica zgornjega programa za nepredznačena števila

        .data 
	.org 0x400
VAR1:   .word 0x44000044
VAR2:	.word 0x43000066
MAX:	.word 0
 
        .text
	.org 0
	addi r10,r0,#2
	lh r1,VAR1(R0)
	lh r2,VAR1(r10)
	lh r3,VAR2(r0)
	lh r4,VAR2(r10)
	lw r10,VAR1(r0)
	sgt r5,r3,r1
	bne r5,LOOP
	seq r5,r3,r1
	beq r5,KON
	sgt r5,r4,r2
	bne r5,LOOP
 
KON: sw MAX(R0),r10
	 halt
 
 
LOOP: lw r10,VAR2(R0)
      j KON(r0)


9. Napišite zaporedje ukazov v zbirniku za procesor HIP, ki 32-bitno spremenljivko VAR1 množi z 2^N, kjer je konstanta N zapisana v 8-bitni spremenljivki POTENCA in rezultat shrani v 32-bitno spremenljivko REZ. Spremenljivki VAR1 in REZ hranita predznačena števila.

	.data
	.org 0x400
 
var1:		.word 5
pot:		.byte 6
rez:		.space 4
 
	.code
	.org 0
 
	lw r1,var1(r0)
	lb r2,pot(r0)
 
	sll  r3,r1,r2
 
	addi r9,r0,#3; za odmik
	sw rez(r9), r3

15. Napišite zaporedje ukazov v zbirniku za procesor HIP, ki najprej zapiše dvojiški komplement 32-bitne spremenljivke STEV1 v spremenljivko STEV2, nato pa eniški komplement STEV1 zapiše v STEV3. Kakšna je končna vrednost spremenljivk STEV2, STEV3, če je začetna vrednost spremenljivke STEV1 enaka: 0, 10, $FE, -1, 32, 128, %01011010? Spremenljivke STEV1, STEV2 in STEV3 naj bodo na naslovih od 0x400 naprej. Napišite zaporedje ukazov še za primer 8-bitnih in 16-bitnih spremenljivk.

POZOR: RESITEV JE NAPACNA(PRI POZITIVNIH NI INVERTANJA BITOV IN PRISTEVANJA 1)!!!
   .data
   .org 0x400
 
var1: .word 2
var2: .space 4
var3: .space 4
 
   .code
   .org 0
 
   lw r1, var1(r0)
   not r2,r1,r0; eniski kompl.
   addi r3, r2, #1; dvojiski kompl. = eniski+1
   sw var3(r0), r2; shranimo obe variabli
   sw var2(r0), r3

17. Napišite zaporedje ukazov v zbirniku za procesor HIP, ki zamenja vrednosti dveh registrov med seboj. Pri tem ne smete uporabiti pomožnih spremenljivk v pomnilniku.

   .data
   .org 0x400
 
var1:   .word 800
var2:   .word 600
 
   .code
   .org 0
 
   ;zamenjali bomo vrednosti r1 in r2
   lw r1, var1(r0)
   lw r2, var2(r0)
 
   add r3, r0, r1; r3<-r1, da bomo imeli se vedno vrednost r1, ko jo prepisemo z r2
   add r1, r0, r2; r1<-r2
   add r2, r0, r3; r2<-r3(=r1)

18. Napišite zaporedje ukazov za procesor HIP, ki v register R1 naloži vrednost 10, nato pa register stalno zmanjšuje za 1, dokler vrednost ni enaka 0 (programska zanka).

   .data
   .org 0x400
 
var1:   .byte 10
 
   .code
   .org 0
 
   lbu r1, var1(r0)
 
   ;zanka v kateri zmanjsujemo za 1
 
LOOP:
   subui r1, r1, #1
   bne r1, #LOOP

19. Napišite zaporedje ukazov za procesor HIP, ki postavi vse bajte spremenljivke (polja) TABELA na naslovu 0x400 na 0. Dolžina polja TABELA je 7 bajtov. Pri eni uporabite rešitev iz naloge 17 (števec ponovitev), pri drugi pa uporaba števca ponovitev ni dovoljena.

varianta s števcem:

   .data
   .org 0x400
 
tab:   .space 7
 
   .code
   .org 0
 
   addui r1, r0, #0 ; nastavimo r1 na 0, potem ga bomo povecevali za 1
   addui r2, r0, #7 ; meja za zanko
 
   ;1 byte zasede en naslov, zato gremo po naslovih nastavljat nicle
 
LOOP:
 
   sb tab(r1), r0; nastavimo byte na 0
   addui r1, r1, #1; povecujemo r1 za 1
   seq r3, r1, r2; preverimo ce smo ze dosegli mejo
   beq r3, LOOP

varianta brez števca:
TA REŠITEV JE NAPAČNA, TUDI TU JE TREBA UPORABITI LOOP, VENDAR NA DRUGAČEN NAČIN UGOTOVITI KDAJ JE KONEC TABELE

   .data
   .org 0x400
 
tab:   .space 7
 
   .code
   .org 0
 
   sw 0x400(r0), r0; nastavimo prve 4 byte na 0(naslovi 0x400-0x403)
   sh 0x404(r0), r0; nastavimo 2 byta na 0(naslovi 0x404-0x405)
   sb 0x406(r0), r0; nastavimo se zadnjega na 0

22. Spremenljivka TABELA je določena z TABELA .BYTE 1, 100, 255, 24, 88, 31, 56, 192, 155, 224, 48, 0, 128, 99, 147, 177
Rezultat naj bo v vsaki od nalog shranjen v 8-bitno spremenljivko REZ. Spremenljivka REZ naj bo na naslovu 0x400, tabela TABELA pa za spremenljivko REZ.
Napišite zaporedje ukazov za procesor HIP, ki

a) Prešteje vsa števila večja od 100 predznačeno.

        .data
	.org	0x400
 
rez:	.space 1
tabela:	.byte	1,101,255,24,88,31,56,192,155,224,48,0,128,99,147,117
 
	.code
	.org	0x0
 
	addi	r10,r0,15; odmik 
	addi     r11,r0,0; znuleramo reg 11
 
zac:	
	beq	r10,konec
	lb	r1,tabela(r10)
 
	sgti	r2,r1,#100
	subi	r10,r10,#1
	bne	r2,povecaj
	j	zac(r0)
 
povecaj:	
	addi	r11,r11,#1
	subi	r2,r2,#1
	j	zac(r0)
 
konec:	lb	r1,tabela(r10)
 
	sgti	r2,r1,#100
	bne	r2,povecaj
	sb rez(r0), r11


b) Prešteje vsa števila večja od 100 nepredznačeno.

.data
   .org 0x400
 
tab: .byte 125, 100, 255, 24, 88, 31, 56, 192, 155, 224, 48, 0, 128, 99, 147, 177   
rez: .space 1
 
   .code
   .org 0
 
   addui r1, r0, #16; meja
   addui r2, r0, #0; odmik
   addui r3, r0, #0; za stetje vecjih od 100
 
LOOP:
   lbu r4, tab(r2)   
   sgti r5, r4, #100
   bne r5, JUMP   ; se sprozi ko najdemo vecje od 100
RETURN:
   subui r1,r1,#1
   addui r2, r2, #1
   bne r1, LOOP ; izvaja se dokler ni r1 enak 0 oz. dosezemo konec
 
   sb rez(r0), r3
   halt
 
JUMP:
   addui r3, r3, #1
   j RETURN(r0)

c) Prešteje vsa števila večja ali enaka 48 in manjša ali enaka 57.

	.data
	.org 0x400
 
REZ:	.space	1
TABELA:	.byte	50,100,255,24,88,31,56,192,155,224,48,0,128,99,147,177	;rezerviramo 1 bajt (8 bitov)
 
	.code
	.org 0x0
 
	addi	r1, r0, #15
	addi	r2, r0, #0
	subi	r7, r0, #1	;shranimo -1 v r7 (za mejo)
 
ZANKA:	seq	r8, r1, r7	;preverimo mejo	..ce je r7 = r1 = -1, moramo koncati program
	bne	r8, KONEC
	lb	r3, TABELA(r1)	;v ZANKo nalozimo trenutno vrednost TABELe
	sgei	r4, r3, #48	;ukaz za r3 >= 48
	slei	r5, r3, #57	;ukaz za r3 =< 57
 
	and	r6, r4, r5	;ce je r5 = 1 in r4 = 1, bo tudi r6 = 1 !!
	bne	r6, PRISTEJ	
 
	subi	r1, r1, #1	;odvzamemo 1 od r1
 
	seq	r8, r1, r7	;preverimo mejo	..ce je r7 = r1 = -1, moramo koncati program
	bne	r8, KONEC
 
	j	ZANKA(r0)
 
PRISTEJ: addi	r2, r2, #1	;povecamo stevec
	subi	r1, r1, #1	;odvzamemo 1 od r1
	j	ZANKA(r0)
 
KONEC:	sb	REZ(r0), r2	;shranimo vrednost v REZT	
	halt

d) Prešteje vsa negativna števila.

	.data
	.org 0x400
 
REZ:	.space	1
TABELA:	.byte	1,100,255,24,88,31,56,192,155,224,48,0,128,99,147,177	;rezerviramo 1 bajt (8 bitov)
 
	.code
	.org 0x0
 
	addi	r1, r0, #15	;odmik
	addi	r2, r0, #0	;v r2 shranjujemo negativna stevila
	subi	r3, r0, #1	;v r3 shranimo -1 (meja)
 
ZANKA:	seq	r6, r1, r3	;primerjamo, ce je r1 = r3 = -1..v tem primeru je r6=1
	bne	r6, KONEC
	lb	r4, TABELA(r1)	;trenutna vrednost
	slti	r5, r4, #0	;primerjamo, ce je r4 =< 0..ce je, bo r5 = 1
	bne	r5, PRISTEJ
 
	subi	r1, r1, #1	;zmanjsamo r1 za 1
	seq	r6, r1, r3	;primerjamo, ce je r1 = r3 = -1..v tem primeru je r6=1
	bne	r6, KONEC
	j	ZANKA(r0)
 
 
PRISTEJ: addi	r2, r2, #1	;povecamo r2 za 1
	subi	r1, r1, #1	;zmanjsamo r1 za 1
	j	ZANKA(r0)
 
KONEC:	sb	REZ(r0), r2	;shranimo r2 v REZultat
	halt

e) Prešteje število ničel v tabeli.

	.data
	.org 0x400
 
REZ:	.space	1
TABELA:	.byte	1,100,255,24,88,31,56,192,155,224,48,0,128,99,147,177	;rezerviramo 1 bajt (8 bitov)
 
	.code
	.org 0x0
 
	addi	r1, r0, #15	;odmik po naslovih
	addi	r2, r0, #0	;števec ničel
	subi	r5, r0, #1	;shranimo vrednost -1 v r5 (za mejo)
 
ZANKA:	seq	r6, r1, r5	;ce sta r1=r5= -1, potem je r6 = 1 in smo prisli do konca
	bne	r6, KONEC
	lb	r3, TABELA(r1)	;v r2 nalozimo trenutno vrednost tabele
	seqi	r4, r3, #0	;primerjamo, če je r3 = 0..ce je, bo r4 = 1, drugace pa r4=0
	bne	r4, PRISTEJ	;ce je r4 != 0, bomo skocili na PRISTEJ
	subi	r1, r1, #1	;v primeru, da ne skocimo na PRISTEJ, moramo odsteti 1, da zacnemo pri
				;naslednjem stevilu
	seq	r6, r1, r5	;ce sta r1=r5= -1, potem je r6 = 1 in smo prisli do konca
	bne	r6, KONEC	
	j	ZANKA(r0)
 
PRISTEJ: addi	r2, r2, #1	;pristejemo stevec
	subi	r1, r1, #1	;odstejemo 1, zato da nato zacnemo pri naslednjem stevilu	
	j	ZANKA(r0)	;skok nazaj na zanko
 
KONEC:	sb	REZ(r0), r2
	halt

f) Vsem številom v tabeli briše bit7.

	.data
	.org	0x400
 
tabela:	.byte	1,100,-25,24,-88,31,56,102,100,24,48,0,127,99,-115,113
 
	.code
	.org	0x0
 
	addi	r10,r0,16
	add     r11,r0,r0
	addi 	r3, r0, 0xfffffffe
 
zac:
	lb	r1,tabela(r10)
 
	and	r1, r1,r3
	sb	tabela(r10), r1
 
	beq	r10,konec
	subi	r10,r10,#1
	j	zac(r0)
 
konec:



g) Vsem številom v tabeli postavi bite: bit0, bit1, bit2 in bit3.

	.data
	.org	0x400
 
tabela:	.byte	1,100,-25,24,-88,31,56,102,100,24,48,0,127,99,-115,113
 
	.code
	.org	0x0
 
	addi	r10,r0,15
	add     r22,r0,r0
	addi 	r3, r0, 0xF0
 
prev:
	lb	r1,tabela(r10)
 
	or	r1, r1,r3
	sb	tabela(r10), r1
 
	subi	r10,r10,#1
	j	prev(r0)

h) Vsem številom v tabeli spremeni (obrne) vrednost spodnjih 4 bitov, zgornje 4 bite pa pusti nespremenjene.

	.data
	.org	0x400
 
tabela:	.byte	1,100,-25,24,-88,31,56,102,100,24,48,0,127,99,-115,113
 
	.code
	.org	0x0
 
	addi	r10,r0,15
	add     r22,r0,r0
	addi 	r3, r0, 0x0F
 
prev:
	lb	r1,tabela(r10)
 
	xor	r1, r1,r3
	sb	tabela(r10), r1
 
	subi	r10,r10,#1
	j	prev(r0)


i) Prešteje vsa števila, ki imajo bit1 in bit4 enak 1.

	.data
	.org 0x400
 
REZ:	.space	1
TABELA:	.byte	1,100,255,24,88,31,56,192,155,224,48,0,128,99,147,177	
 
	.code
	.org 0x0
 
	addi	r1, r0, #15	;odmik
	addi	r2, r0, 0X12	;stevilo, potrebno za operacijo or
	subi	r5, r0, #1	;v r5 shranimo -1 (za mejo)
	addi	r8, r0, #0	;r8 bo nas stevec
 
ZANKA:	seq	r6, r1, r5	;primerjamo, ce je r1 prisel do -1 (r5)
	bne	r6, KONEC	;ce se ni, nadaljujemo s preverjanjem, sicer pa skok na KONEC
	lb	r3, TABELA(r1)	;v r3 nalozi zacasno stevilo v TABELi
	or	r4, r2, r3	;preverimo, kaj se zgodi z or
	seq	r7, r4, r3	;ce je stevilo, ki pride iz xor (r4) enako prvotnemu stevilu iz tabele, je r7 = 1
	bne	r7, PRISTEJ	;ce je r7 != 0, potem skoci na PRISTEJ
 
 
	subi	r1, r1, #1	;zmanjsamo r1 za 1
	seq	r6, r1, r5	;primerjamo, ce je r1 prisel do -1 (r5)
	bne	r6, KONEC	;ce se ni, nadaljujemo s preverjanjem, sicer pa skok na KONEC
	j	ZANKA(r0)
 
PRISTEJ: addi	r8, r8, #1	;povecamo stevec za 1
	subi	r1, r1, #1	;zmanjsamo r1 za 1
	j	ZANKA(r0)
 
KONEC:	sb	REZ(r0), r8
	halt

j) Prešteje vsa števila, ki imajo bit0, bit6 in bit7 enak 0.

	.data
	.org 0x400
 
REZ:	.space	1
TABELA:	.byte	1,100,255,24,88,31,56,192,155,224,48,0,128,99,147,177	
 
	.code
	.org 0x0
 
	addi	r1, r0, #15	;odmik
	addi	r2, r0, 0X3E	;stevilo, potrebno za operacijo or
	subi	r5, r0, #1	;v r5 shranimo -1 (za mejo)
	addi	r8, r0, #0	;r8 bo nas stevec
 
ZANKA:	seq	r6, r1, r5	;primerjamo, ce je r1 prisel do -1 (r5)
	bne	r6, KONEC	;ce se ni, nadaljujemo s preverjanjem, sicer pa skok na KONEC
	lb	r3, TABELA(r1)	;v r3 nalozi zacasno stevilo v TABELi
	and	r4, r2, r3	;preverimo, kaj se zgodi z or
	seq	r7, r4, r3	;ce je stevilo, ki pride iz and (r4) enako prvotnemu stevilu iz tabele, je r7 = 1
	bne	r7, PRISTEJ	;ce je r7 != 0, potem skoci na PRISTEJ
 
 
	subi	r1, r1, #1	;zmanjsamo r1 za 1
	seq	r6, r1, r5	;primerjamo, ce je r1 prisel do -1 (r5)
	bne	r6, KONEC	;ce se ni, nadaljujemo s preverjanjem, sicer pa skok na KONEC
	j	ZANKA(r0)
 
PRISTEJ: addi	r8, r8, #1	;povecamo stevec za 1
	subi	r1, r1, #1	;zmanjsamo r1 za 1
	j	ZANKA(r0)
 
KONEC:	sb	REZ(r0), r8
	halt

k) *V spremenljivko REZ zapiše vrednost, ki ima ustrezen bit nastavljen, če je število istoležnih bitov v bajtih tabele liho in zbrisan, če je sodo (soda parnost).

	.data
	.org 0x400
 
TABELA:	.byte	1,100,255,24,88,31,56,192,155,224,48,0,128,99,147,177	
REZ:	.space	1
	.code
	.org 0x0
 
	addi	r1, r0, #15	;odmik
	addi	r2, r0, #0	;fiksna spremenljivka za odmik
 
 
	lb	r3, TABELA(r1)	;nalozimo zacasno stevilo iz tabele v r3
	lb	r4, TABELA(r2)	;prvo stevilo
 
	xor	r5, r4, r3	;vrednost xor za dve stevili
	subi	r1, r1, #1	;odstejemo 1 od r1
 
 
ZANKA:	beq	r1, KONEC	;ko je r1 = 0, nehamo..takrat odmik sicer ne pride do 1.st. TABELe (1),
				;vendar to smo ze zgoraj upostevali
	lb	r3, TABELA(r1)
 
	xor	r5, r5, r3
	subi	r1, r1, #1
 
	j	ZANKA(r0)
 
KONEC:	sb	REZ(r0), r5
	halt

25. Napišite podprogram v zbirnem jeziku za procesor HIP, ki sešteje elemente dveh polj, ki vsebujejo 8-bitna predznačena števila v predstavitvi z odmikom (odmik je 128), po pravilu, ki ga podaja spodnja psevdo koda: SUM = A[i] + B[i] IF SUM > 255 SUM = 255 ELSE IF SUM < 0 SUM = 0 A[i] = SUM Dodaten namig: števila v predstavitvi z odmikom seštevamo tako, da števili seštejemo, nato pa en odmik odštejemo. Naslov polja A dobi podprogram v registru R24, naslov polja B v registru R25, število elementov polj pa kot parameter na skladu.


		.data 
		.org 0x400
A:		.byte 1,32,-123,34,24,-3,127
B:		.byte 23,35,26,89,-43,2,127
 
		.text
		.org 0x0
		addui r30,r0,#0x4fc	;skladovni kazalec
 
		addui r24,r0,#A		;1. tabela
		addui r25,r0,#B		;2. tabela
 
		addui r1,r0,#7 		; stevilo elementov vržemo v sklad
		sw 0(r30),r1
		subui r30,r30,#4
 
		call r31,PODP(r0)	; klic podprograma
		halt
 
PODP:		addui r10,r0,#0
		addui r8,r0,#1
 
		addui r30,r30,#4	;iz sklada vrzemo st elementov
		lw r17,0(r30)
 
LOOP:		lb r5,0(r24)		;nalozimo A[i]
		lb r6,0(r25)		;nalozimo B[i]
 
		add r10,r5,r6		; sestejemo
		sgti r2,r10,#255
		beq r2,ELSEIF
		addui r10,r0,#255
		j NAPREJ(r0)
 
ELSEIF: 	slti r2,r10,#0
		beq r2,NAPREJ
		addui r10,r0,#0
 
NAPREJ: 	sb 0(r24),r10		; rezulatat zapisemo A[i]
		addui r24,r24,#1	;povecamo i
		addui r25,r25,#1
 
		addui r8,r8,#1
		sgt r2,r8,r17		;stevec primerjamo z st elementov
		beq r2,LOOP
		j 0(r31)


26. Napišite podprogram v zbirnem jeziku za processor HIP, ki izračuna obteženo vsoto elementov dveh polj, ki vsebujejo 16-bitna predznačena števila, po pravilu: A[i] = 0.125 * A[i] + 0.875 * B[i] Ker HIP nima ukazov za delo s plavajočo vejico, naj program obteženo vsoto izračuna po A[i] = (A[i] + 7 * B[i]) / 8; Naslov polja A dobi podprogram v registru R24, naslov polja B v registru R25, število elementov polj pa kot parameter na skladu. Namig: 7x = x + 2x + 4x


        .data
	.org	0x400
 
tabela1: .word16	50,70,100,80,4,5,6,7	
tabela2: .word16	99,100,101,12,3,2,4,8	
 
	.code
	.org	0x0
 
	addui r30,r0,#0x4FC		; shranimo povratni naslov
	add r28,r0,r0			;znuliramo r28
 
	addi r24, r0, #tabela1	        ;v registra shranimo naslova tebel
	addi r25, r0, #tabela2
 
	addi r1,r0,#8			;v reg1 nalozimo dolzino
	sw 0(r30), r1    		; in jo porinemo  na sklad
	subi r30,r30,#4
 
	call r31,podprog(r0)	        ; klic podprograma
	halt
 
podprog: 
	sw 0(r30), r31  		;push 31
	subui r30,r30,#4
	sw 0(r30), r29  		;push 29
	subui r30,r30,#4
	add r29, r0, r30		;nastavimo SP na okvir
 
	sw 0(r30), r5                    ;na sklad nalozimo registre
	subi r30, r30, #4		 ;ki jih spreminajmo 
	sw 0(r30), r6              
	subi r30, r30, #4
	sw 0(r30), r7             
	subi r30, r30, #4           
	sw 0(r30), r9 
	subi r30, r30, #4
	sw 0(r30), r10             
	subi r30, r30, #4           
	sw 0(r30), r8
	subi r30, r30, #4
 
	lw r5, 12(r29)			; v reg r5 nalozimo dolzino tabele 
 
sestej:	
	lh r6, 0(r24)			;nalozimo en element tabele1
	lh r7, 0(r25)			;nalozimo en element tabele2
 
	;IZRACUN 
	slli r9,r7,#1			;2*B
	slli r10,r7,#2			;4*B
	add r8,r7,r9			;B+2*B
	add r8,r8,r10			;3*B+4*B=7*B
 
	add r8,r8,r6			;A+7*B
	srli r8,r8,#3			;(A+7*B)/8
 
	add r28,r28,r8			;vsota v r28
 
	addui r24,r24,#2		;povecamo naslov za 2 bajta
	addui r25,r25,#2
	subui r5, r5, #1		;zmanjsamo dolzino
 
	bne r5, sestej			;ce se nismo na koncu tabele ponovimo
 
izstop:	
	addui r30, r30, #4         ;pop r8
	lw r8, 0(r30)
	addui r30, r30, #4          ;pop r10
	lw r10, 0(r30)
	addui r30, r30, #4          ;pop r9
	lw r9, 0(r30)
	addui r30, r30, #4          ;pop r7
	lw r7, 0(r30)
	addui r30, r30, #4          ;pop r6
	lw r6, 0(r30)
	addui r30, r30, #4          ;pop r5
	lw r5, 0(r30)
 
	add r30, r0, r29            ;pobrisemo lokalne spr
	addui r30, r30, #4          ;pop r29
	lw r29, 0(r30)
	addui r30, r30, #4          ;pop r31
	lw r31, 0(r30)
 
	j 0(r31)
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja