Programma da C ad essembly MIPS32

di il
1 risposte

Programma da C ad essembly MIPS32

Questo è il programma. Ho provato a farlo su fogli ma non riesco bene a muovermi con i salti perchè i controlli if mi mettono un pò in difficoltà. Potete darmi una mano?

Grazie
/*
	Dato un array di interi diversi tra loro, 
	trova il secondo valore più piccolo e la sua posizione nell'array
*/
#include <limits.h>
#include <stdio.h>
#define N 7
int a[N] = { 5, -3, 1, -7, 2, -6, -5 };
int main(void) {

	int min_el_val = INT_MAX, min_el_ind;
	int min2_el_val = INT_MAX, min2_el_ind;
	
	int i, t;
	
	i=0;
inizio_for:
	if (!(i<N)) goto fine_for;
		t = a[i];
		
		/* se ho un nuovo minimo... */
		if (t<min_el_val) goto then_if1;  
		/* altrimenti se ho un nuovo secondo piu' piccolo... */
		if (!(t<min2_el_val)) goto fine_if2;
			/* ... aggiorno min2 */
			min2_el_val = t;
			min2_el_ind = i;			
fine_if2:
      
      goto fine_if1;
      
then_if1: 
		    /* ... aggiorno min e min2 */
			min2_el_val = min_el_val;
			min2_el_ind = min_el_ind;
			
			min_el_val = t;
			min_el_ind = i;
		
fine_if1:

  i++;
  goto inizio_for;
fine_for:	
	
	printf("\nIl secondo piu' piccolo elemento ha valore %d e posizione %d\n", min2_el_val, min2_el_ind);
	return 0;
}

1 Risposte

  • Re: Programma da C ad essembly MIPS32

    Semplicemente in assembler gli if sono di diverso tipo

    c'è la bge, la bne ed altre! semplicemente a seconda di ciò che devi vedere, utilizzi una istruzione di branch! ad esempio la bne è la branch not equal, ovvero se non è uguale a fa quello che gli dici di fare!

    ad esempio se dici

    if (s=0)
    fai codice
    else
    fai codice

    in assembler si fa

    bne $t0,$t0, 0
    j funzione dove deve andare

    Spero che ti sono stato d'aiuto
Devi accedere o registrarti per scrivere nel forum
1 risposte