Un semplice programmino in Assembly per pd32, che si occupa di
calcolare il saldo in base ad una serie di movimenti positivi o negativi.


SALDO CONTO BANCARIO
tutti i dati sono a 16 bit; il saldo iniziale è memorizzato in 0000 1b00
i movimenti sono memorizzati in locazioni consecutive a 0000 1f00;
l’ultimo movimento è seguito da una posizione di memoria contente 0

Assunzioni arbitrarie

  • realisticamente il saldo parte da zero;
  • ottimisticamente il saldo termina positivamente.

codice C:

#include 
int main(int argc, char *argv[]){
int saldo=0, i=0;
int mov[]={1,-2,-8,10,20,0};
printf ("saldo = %d \n",saldo);
do{
saldo+=mov[i];
i++;
}while( mov[i]!=0);
printf ("saldo finale= %d \n",saldo);
return 0;
}

che diventa:


org 400h

SALDO equ 1b00h ; indirizzo saldo
MOV equ 1f00H

code
; inserisco movimenti
movl #mov,r0 ; ind movimenti in R0
movw #1,(R0)+
movw #-2,(R0)+
movw #-8,(R0)+
movw #10,(R0)+
movw #20,(R0)+
movw #0,(R0)+ ; fine movimenti

movl #mov,r0 ; r0= indirizzo di MOV
xorw r1,r1 ; azzera r1 (inutile in questo caso)

ADD:
movw (r0)+,r2 ; muovi il valore del mov in r2, incrementa ind. mov
cmpw #0,r2 ; (valore all’indirizzo contenuto in r0) – 0
jz FINE ; se = 0 vai a SAVE

addw r2,r1 ; altrimenti somma movimento a saldo
jmp ADD

FINE:
movw r1,SALDO
halt
end

; risultato 15h = 00010101 = 5+16= 21 😉

codice evidenziato grazie a source-highligth