H=TOS SP= 0 //inizializzazione contatore di 1 in TOS loop N=TOS; if (N) goto uno; else goto zero uno SP=SP+1 zero H=TOS=H+TOS; if (Z) goto fine; else goto loop //shift a sx di TOS e controllo uscita loop fine L'uscita dal loop si ha quando TOS diventa 0, poiche' significa che non ci sono piu' '1' da contare. Lo shift a sinistra si ottiene sfruttando la proprieta' che la somma di una stringa binaria con se stessa produce tale effetto. Per il ciclo si potrebbe anche utilizzare un contatore inizializzato a 32, ma il codice diventa inevitabilmente piu' lungo e si cicla necessariamente 32 volte: H=OPC=1 H=OPC=H+OPC H=OPC=H+OPC H=OPC=H+OPC H=OPC=H+OPC OPC=H+OPC //inizializzazione a 32 di OPC H=TOS SP= 0 //inizializzazione contatore di 1 in TOS loop N=TOS; if (N) goto L1; else goto L2 L1 SP=SP+1 L2 H=TOS=H+TOS //shift a sinistra di TOS OPC=OPC-1; if (Z) goto fine; else goto loop //shift di OPC e verifica termine ciclo fine Si potrebbe pensare di utilizzare lo shift a destra di Mic-1 (>>1) e il controllo del bit piu' a destra (mettendo TOS in AND con un registro inizializzato ad 1, e controllando (Z) ). Questo approccio pero' porta ad un codice piu' lungo poiche', essendo lo shift a destra di Mic-1 uno shift aritmetico, bisogna tenere conto anche del caso in cui TOS contenga (la rappresentazione di) un numero negativo.