Un semplice programmino in Assembly per pd32, che si occupa di effettuare delle somme per righe in una matrice data. Ecco le specifiche:

La memoria del PD32 contiene a partire dall’indirizzo DATI dodici valori consecutivi in formato Byte che rappresentano le 12 componenti di una matrice 3 Righe X 4 Colonne.
Calcolare la somma di ciascuna riga trasferendo i tre risultati in formato LongWord a partire dall’indirizzo RISUL.

codice C:

#include 
#define RIGHE 3
#define COL 4

int main(int argc, char *argv[]){
int matrice[RIGHE][COL],i,j,k=0;
int RISUL[RIGHE]={0,0,0};

for (i=0; i<RIGHE; i++) // riempio la matrice 0..11
for (j=0; j<COL; j++, k++)
matrice[i][j]=k;

for(i=0; i<RIGHE; i++){
for (j=0; j<COL; j++)
RISUL[i]+=matrice[i][j];
}
printf (" risultato somme: ");
for (i=0; i<RIGHE; i++) printf(" %d ",RISUL[i]);
return 0;
}

che diventa:

; SOMMA ELEMENTI DELLE RIGHE DI UNA MATRICE 3X4, A PARTIRE DALL'IND. DATI
; E SALVA LE SOMME AGLI INDIRIZZI PUNTATI A PARTIRE DA RISUL
org 400h
; definizione variabili
; ogni indirizzo è da 4 B, quindi 12B mi sposteranno di 2 celle
; (12/4-1 esclusa la 1°) arrivando a 558h
dati equ 550h ; 12 Byte
risul equ 500h
righe equ 3
col equ 4

code

; memorizzo elementi celle
movl #dati,R0 ; qui metto l'indirizzo
xorb R1,R1 ; i
xorb R4,R4
; for(i=0; i<12; i++, r0++) r0=i;
FOR:
cmpb #12,R1
jz ESEGUI
movb R1,(R0)+ ; copia r1 in &R0 e avanza di un byte l'indirizzo puntato
addb #1,R1 ; i++
jmp FOR

; calcolo somma
ESEGUI:
; resetto il puntatore a dati
movl #dati,R0
xorb R1,R1 ; sommaRiga
movl #risul,R2 ; R2=&risul somme
xorb r3,r3 ; i
; sommo prima riga

RIGA:
cmpb #col,r3 ; for (int i=0; i
jz SALVA
addb (r0)+,R1
addb #1,r3
jmp RIGA ; end for

SALVA: ; salva la somma e passa a riga successiva
cmpb #righe,r4
jz FINE
movl r1,(r2)+ ; salva r1 e incrementa &R2
xorb r1,r1 ;resetta la somma(R1)
addb #1,r4 ; incrementa numero riga
xorb r3,r3 ; resetta colonna
jmp RIGA

FINE: halt

end

codice evidenziato grazie a source-highligth