- Idee e Tips (Codice Mixal) -
[ STORE ]
- ------------------------------------ cut code --------------------------------------------*
ENTA 5 rA [+|0|0|0|0|5]
STA 1000 cella 1000 [+|0|0|0|0|5]
- ------------------------------------ cut code --------------------------------------------*
ENTA 5 rA [+|0|0|0|0|5]
STA 1000(3:4) cella 1000 [+|0|0|0|5|0]
^ ^
|-|
CELLE 3:4
La stessa cosa potrebbe essere fatta così:
STA 1000(28) cella 1000 [+|0|0|0|5|0]
- ------------------------------------ cut code --------------------------------------------*
[ LOAD ]
- ------------------------------------ cut code --------------------------------------------*
ENTA 65 rA [+|0|0|0|1|1]
rI2 [+| |0|0]
STA 1000 cella 1000 [+|0|0|0|1|1]
LD2 1000 rI2 [+| |1|1]
- ------------------------------------ cut code --------------------------------------------*
[ COMPARE / JMP ]
- ------------------------------------ cut code --------------------------------------------*
ENTA 12 rA [+|0|0|0|0|12]
STA 1000 cella 1000 [+|0|0|0|0|12]
CMPA 3100 >> il contenuto della cella 3100 e' uguale al contenuto di rA quindi CMPA restituirà EQUAL <<
JE CICLO >> il contenuto è uguale (come detto dalla istruzione compare) quindi salta a CICLO (e' una etichetta
definita nel programma in Mixal) <<
- ------------------------------------ cut code --------------------------------------------*
[ DIRETTIVA CON ]
- ------------------------------------ cut code --------------------------------------------*
ORIG 1000
ENT1 5 >> ENT1 è all'indirizzo 1000 e ovviamente inserisce il valore 5 in rI1 <<
CON 1 >> con invece e' alla locazione di memoria 1000+1 (1001); ove copia il valore 1 <<
cella 1001 [+|0|0|0|0|1]
- ------------------------------------ cut code --------------------------------------------*
[ MUL e DIV ]
- ------------------------------------ cut code --------------------------------------------*
ENTA 5 rA [+|0|0|0|0|5]
STA 1000 cella 1000 [+|0|0|0|0|5]
MUL 1000 rA [+|0|0|0|0|0] |
| ==> 5 x 5 = 25 (rAX = 25)
rX [+|0|0|0|0|25] |
[ NB ]
MUL 1000 -> 1000 e' la locazione di memoria dove ho inserito il valore 5.
- ------------------------------------ cut code --------------------------------------------*
- ------------------------------------ cut code --------------------------------------------*
ENTX 16 rA [+|0|0|0|0|16]
ENT1 5 rI1 [+| |0|5]
ST1 1000 cella 1000 [+|0|0|0|0|5]
DIV 1000 rA [+|0|0|0|0|3] ===> rA contiene il risultato 16:5 = 3 [5x3 = 15]
rX [+|0|0|0|0|1] ===> rX contiene il resto 16 mod 5 = 1 [16:3 = 15 + "1" = 16]
[ NB ]
DIV 1000 -> 1000 e' la locazione di memoria dove ho inserito il valore 5.
- ------------------------------------ cut code --------------------------------------------*
[ SOMME ]
- ------------------------------------ cut code --------------------------------------------*
ENT1 1 rI1 [+|0|0|0|0|1]
ENT2 2 rI2 [+|0|0|0|0|2]
INC1 0,2 rI2 [+|0|0|0|0|3] ===> Somma in rI1 il contenuto di rI1 + rI2 = 3
INC1 1 rI1 [+|0|0|0|0|4] ===> Incrementa rI1 di 1
- ------------------------------------ cut code --------------------------------------------*
[ INDIRIZZI IN MIXAL ]
- ------------------------------------ cut code --------------------------------------------*
ORIG 1000
ind. 1000
ind. 1001
ind. 1002
[...]
ENT2 LABEL rI2 [+| |15|47]
ind. 1007 LABEL CON 1234
[...]
In rI2 verrà inserito l'indirizzo di LABEL (NON IL SUO CONTENUTO; NON E' UNA LOAD!!).
L'indirizzo viene "ricavato" con l'operazione seguente:
1007 / 64 = 15,734..
0,734 x 64 = 47
Ed effettivamente rI2 e' uguale a 15|47 !!
- ------------------------------------ cut code --------------------------------------------*