[CALU] Code-Examples

  • From: Günther Wimpassinger <e0525147@xxxxxxxxxxxxxxxxxxxx>
  • To: "CALU G. Wimpassinger" <calu-ss2010-tuwien@xxxxxxxxxxxxx>
  • Date: Wed, 14 Apr 2010 08:17:11 +0200

Guten Morgen,

Ich werde noch das C-Beispiel aus 2.1 auf unsere ISA ummüntzen, wenn es
noch niemand erledigt hat. Ich werd schauen, so dass ich zwischen 11:30
und 12:00 Uhr im TI-LAB bin.

Josip, hab mir kurz deinen Code angesehen und habe da ein paar
verbesserungsvorschläge.

a) Das Array sollte keine fixe größe haben, sondern als Parameter übergeben 
werden.
b) Es funktioniert nicht, wenn die größte Zahl im Array negativ ist
c) Ich würde zwei Funktionen daraus machen


C-Code
int max(int *arr, int len){
 int max;
 int i;

 if (len==0) max=0;
 else max=arr[0];

 for (i=1;i<len;i++)
     if(arr[i]>max) max=arr[i];

 return max;
}

int ones(unsigned int val) {
 int cnt=0;

 while(val) {
    if (val & 1) cnt++;
    val>>=1;
 }

 return cnt;
}

d) Bei der Abfrage (val & 1) und val>>=1 kannst du die ALU-Flags benutzen
r2=val; r3=cnt;
ones:
 xor    r3,r3,r3       ; cnt=0
loop:
 lsrif  r2,r2,#1       ; shift lowest bit in carry and
                       ; set zero flag if val==0 after shift
 addi   r3,r3,#1  (pC) ; cnt++
 ret              (pZ)
 bip    loop           ; val!=0 back to loop



Other related posts:

  • » [CALU] Code-Examples - Günther Wimpassinger