

Las dieciseis instrucciones elegidas son las recogidas en la Tab.
1. Seguidamente se desarrolla cada una de ellas.
De forma global puede observarse que a pesar de ser sólo 16
instrucciones, las hay de transferencia de datos, aritméticas,
lógicas, de salto (incondicional y condicional), de control de estado
y de subrutinas. Asímismo se incluyen los modos de direccionamiento
siguientes:
|
|
|
|
|
| 0 | LAIM | AC<-AA | Transf.: carga AC con el dato AA |
| 1 | LDA | AC<-M | Transf.: cargar en AC |
| 2 | STA | M<-AC | Transf.: almacenar en M |
| 3 | ADD | AC<-AC+M | Arit.: suma |
| 4 | SUB | AC<-AC-M | Arit: diferencia |
| 5 | ADDI | AC<-AC+M($[M]7-0) | Arit: suma indirecta |
| 6 | ROR | SHR(C,AC),C<-AC0 | Log.: desp. a derecha (con carry) |
| 7 | ROL | SHL(AC,C),C<-AC11 | Log.: desp. a izquierda(con carry) |
| 8 | JMP | GOTO $AA | Salto: salto incondicional |
| 9 | BCS |
|
Salto: salto condicional
si C=1 salta a $AA |
| A |
|
|
Salto: decrementa y salta si cero |
| B | CLC | C<-0 | Estado: Pone carry a 0 |
| C | SEC | C<-1 | Estado: Pone carry a 1 |
| D | STOP | Control: Parada | |
| E | JSR |
|
Salto: salto a subrutina |
| F | RTS |
|
Salto: retorno de subrutina |
| LAIM : AC <- AA | 0000 A7-A0 |
| 1. RT <- 011-8 IR7-0;AC<-0; | R8,CIM,WT,ZA |
| 2. AC <- AC + RT | RT,A,WA |
El valor AA suministrado en el campo de direcciones de la instrucción se almacena en el acumulador. Se usa para almacenar datos conocidos por el programador. Durante su ejecución se pierde el contenido previo del registro RT y del biestable BC.
| LDA($AA) : AC <- M | 0001 A7-A0 |
| 1. MAR <- IR | TIR |
| 2. RT <- RAM ; AC <- 0 | ZA,WT,R |
| 3. AC <- AC + RT | RT,A,WA |
Se trata de una operación de transferencia entre registros. Se transvasa el contenido de la memoria RAM, en la dirección que indica la instrucción, al registro acumulador.
| STA($AA) : M <- AC | 0010 A7-A0 |
| 1. MAR <- IR | TIR |
| 2. RAM <- AC | RA, W |
Es una operación de transferencia entre registros. El contenido del registro acumulador se transvasa a la memoria RAM del sistema, en la dirección que indica la instrucción.
| ADD($AA) : AC <- AC + M | 0011 A7-A0 |
| 1. AR <- IR | TIR |
| 2. RT <- RAM | WT,R |
| 3. AC <- AC + RT | RT,A,WA |
Es una operación aritmética. Se trata de sumar el contenido del registro acumulador con el dato almacenado en la memoria RAM del sistema, en la dirección que indica la instrucción. El resultado se almacena en el registro acumulador.
| SUB($AA) : AC <- AC - M | 0100 A7-A0 |
| 1. AR <- IR | TIR |
| 2. RT <- RAM | WT,R |
| 3. AC <- AC - RT | RT,S,WA |
Operación aritmética. Al contenido del registro acumulador se le resta el contenido de la memoria RAM en la dirección que le indica la instrucción. El resultado se almacena en el registro acumulador.
| ADDI($AA) : AC <- AC + M[$[M]7-0] | 0101 A7-A0 |
| 1. AR <- IR | TIR |
| 2. IR7-0<- RAM7-0 | R, W8 |
| 3. AR <- IR | TIR |
| 4. RT <- RAM | R, WT |
| 5. AC <- AC + RT | RT, A, WA |
Operación aritmética. En ella se suma, al contenido del registro acumulador el dato cuya dirección de memoria, se encuentra almacenada en la dirección de memoria que se indica en la instrucción. El resultado de esta operación se almacena en el registro acumulador.
| ROR : AC <- SHR(AC,C) | 0110 ---- ---- |
| 1. AC <- SHR(AC, C); BC <- AC0 | RR |
Operación de tipo lógico. Se trata del desplazamiento circular a la derecha del contenido del registro acumulador junto con el del biestable de acarreo. Por ello, el bit menos significativo AC0 se almacena en el biestable BC, mientras que la entrada serie en el acumulador es el bit C.
| ROL : AC <- SHL(AC,C) | 0111 ---- ---- |
| 1. AC <- SHL(AC, C); BC <- AC11 | RL |
Operación de tipo lógico. Similar a la anterior salvo que el desplazamiento circular es a la izquierda.
| JMP($AA): GOTO $AA | 1000 A7-A0 |
| 1. PC <- IR7-0 | R8, WPC |
Operación "de salto". En este caso se trata de que la próxima instrucción a ejecutar es la de la dirección de memoria indicada por la instrucción.
| BCS($AA): C: GOTO $AA | 1001 A7-A0 |
| 1. C: PC <- IR7-0 | R8, WPC |
Es una operación "de salto". Es similar a la anterior salvo que es salto condicional, es decir, depende del estado en que se encuentre el biestable BC: si está a "0", no se producirá el salto y seguirá con la instrucción siguiente (N+1); si está a "1" se produce el salto a la instrucción almacenada en $AA.
DBZ($AA) : IF(M-1!=0) THEN GOTO N+2......1010 A7-A0
| ADDI($AA) : AC <- AC + M[$[M]7-0] | 0101 A7-A0 |
| 1. MAR <- IR | TIR |
| 2. RT <- RAM | R, WT |
| 3. RT <- RT - 1 | DT |
| 4. RAM <- RT;
Z: PC <- PC + 1 |
RT, W
IPC |
Operación "de salto". Esta operación decrementa en una
unidad el contenido de la dirección de memoria determinada por la
instrucción y, dependiendo del resultado, ejecuta la instrucción
siguiente (N+1) si es nulo, o salta a la que sigue (N+2), si no es nulo.
En todo caso, el resultado obtenido tras decrementar, se vuelve a almacenar
en la misma posición de memoria. La variable Z, llamada variable
CERO,nos indica si el contenido del registro del cual se toma es cero (Z=1),
o no (Z=0).
| CLC: C <- 0 | 1100 ---- ---- |
| 1. BC <- 0 | CC |
Operación "de estado". Coloca a "0" el biestable BC.
| SEC: C <- 1 | 1101 ---- ---- |
| 1. BC <- 1 | SC |
Operación "de estado". Coloca a "1" el biestable BC.
| STOP: | 1101 ---- ---- |
| --- | S0 |
Operación de control. Se trata de la operación de parada y es la última del programa. Como se ve no hay que realizar ninguna operación; sólo hay que colocar al sistema en el estado de espera S0, del cual saldrá cuando se active la señal de comienzo XS.
| JSR($AA) : PUSH[PC], GOTO $AA | 1110 A7-A0 |
| 1. SP <- SP - 1 | DS |
| 2. AR <- SP | TSP |
| 3. RAM <- PC | RPC, W |
| 4. PC <- IR7-0 | R8, WPC |
Operación "de salto". Es el salto a subrutina. Para ello se almacenará la dirección de retorno en la pila (PUSH [PC]) y,después, se cargará el contador de programa PC con la dirección de comienzo de la subrutina ($AA, dada en la instruccion). La operación de pila en nuestro caso, PUSH [PC] requiere las transferencias:
| RTS : PC <- PULL (pila) | 1111 ---- ---- |
| 1. AR <- SP | TSP |
| 2. PC <- RAM ; SP <- SP + 1 | R,WPC,IS |
Operación "de salto". Se trata del retorno de una subrutina. La instrucción RTS es la última de cualquier subrutina. Su ejecución hace que el contador de programa se cargue con el dato extraído de la pila (PC <- PULL (pila)). En nuestro caso, PC <- PULL (pila) requiere las transferencias:

