Quickref - SimuProc (versi´on: 1 de junio de 2016)
Descripci´ on on Esta es una gu´ıa ıa de referencia rapida de las instrucciones del programa SimuProc, no es un reemplazo de la documentaci´ on on del programa.
Formato Formato utilizado ´ [ param XX INSTRUCCION [ param]] — Descripci´on. on. Expresi´ Expr esi´on re sumida sumi da . XX es el n´umero umero de instrucci´on. on. INST es el nombre de la instrucci´on. param puede ser1 : • •
Registros y variables del procesador Ax Acumulador. Acumulador. Bx Proposito general, lectura/escritura de vectores. vectores. Cx Contador, bucles. bucles. Flags Banderas asociadas a la ultima operaci´on on de la ALU. Z N C O
(Zero) Resultado 0. (Negative) Resultado negativo. (Carry) Resultado con con acarreo. (Overflow) Resultado con desbordamiento. desbordamiento.
PC Contador de programa: programa: Direcci´ on on de memoria de la proxima instrucci´on on a ejecutar.
mem una mem una direcci´on on de memoria (hexademial).
SP Puntero Puntero de pila: Direcci´ on de memoria del tope de pila. on
reg un registro.
BP Inicio de la pila: A partir de que direcci´on de memoria se construye la pila.
•
dest un dest un registro o direcci´on on memoria de destino.
•
orig un orig un registro o direcci´on on memoria de origen.
•
msg un msg un mensaje para la pantalla.
•
n para indicar un n´umero umero natural.
•
1
puerto, puerto, para instrucciones de entrada/salida.
MAR Registro de Direcci´on on de Memoria. Direcci´on on del dato a leer o escribir por la instrucci´on. on. MDR Registro de Datos de Memoria. Memoria. Registro del CPU conectado al bus de datos. IR Registro de Instrucci´ on. on. La instrucci´on on siendo ejecutada.
Nomenclatura Pseudoc´odigo: odigo: X ← ← Y := Asignar := Asignar a X el X el valor de Y de Y . @X := := Valor contenido en X. en X. X X e Y . Y := Intercambiar los valores de X e X N := := Empujar N bits a izquierda, completando con ceros a derecha. derecha . X ← ← N := N := Empujar N bits a izquierda, completando con los bits empujados a derecha. derecha . ¬X := := Negar el contenido de X. X.
Instrucciones Acumulador
Uso general 06 PUSH [reg [reg]] — Apilar Apilar el valor del registro. registro. @SP ← reg; reg ; SP ← SP − 1. 07 POP [reg [reg]] — Quitar Quitar el tope, guardarl guardarlo o en un registro. registro. reg ← @SP ; SP ; SP ← SP + SP + 1. 1. 08 INC [dest [dest]] — Incrementa en 1. 1. INC Ax == Ax == Ax Ax ← Ax + 1. 09 DEC [dest [dest]] — Decrementa en 1. DEC Ax == Ax == Ax Ax ← Ax − 1. 10 MOV [dest,orig [ dest,orig]] — Copiar orig en orig en dest. dest. dest ← orig. orig . 11 AND [dest,orig [dest,orig]] — Conjunci´on on l´ogica ogica (Y). dest ← dest ∧ orig. orig . 12 NOT [dest [dest]] — Negaci´on on l´ogica ogica (No). dest ← ¬dest. dest. 13 OR [dest,orig [ dest,orig]] — Disyunci´ Disyunci on ´on logica ´ogica (O). dest ← dest ∨ orig. orig . ´ 14 XOR [dest,orig [ dest,orig]] — Disyunci´on on l´ogica ogica exclusiva ( O). dest ← dest ∨ orig. orig . 15 ROL [des [dest,n t,n]] — Rotaci´on on a izquierda. dest ← dest ← n. n. 16 ROR [des [dest,n t,n]] — Rotaci´on on a derecha. dest ← dest → n.
01 LDA [mem [mem]] — Cargar Ax de memoria. Ax ← @mem
17 SHL [des [dest,n t,n]] — Desplazamiento a izquierda. dest ← dest n.
02 STA STA [mem [mem]] — Almacenar Ax en memoria. @mem ← Ax
18 SHR [dest,n [dest,n]] — Desplazamiento a derecha. dest ← dest n.
03 XBA — Intercambia Intercambiarr Ax y Bx. Ax Bx 04 CLA — Limpiar el valor valor de Ax, o asignarle asignarle 0. Ax ← 0
Quickref - SimuProc (versi´on: 1 de junio de 2016)
Aritm´ etica de Punto Fijo 20 ADD [mem] — Suma a Ax. Ax ← Ax + @mem. 21 SUB [mem] — Resta a Ax. Ax ← Ax − @mem. 22 MUL [mem] — Multiplica Ax. Si el n´umero es muy grande (O = 1)se usa Bx para la parte m´as significativa. Ax ← Ax × @mem. 23 DIV [mem] — Divide a Ax, y guarda el resto en Bx. Ax ← Ax/@mem; Bx ← Ax %@mem. 24 CLN — Asignar 0 a la variable Negative. N ← 0.
2
34 JMA [mem] — Saltar Ax es mayor. P C ← mem S´ı Z = 0 ∧ N = 0. 35 JC [mem] — Saltar si hay acarreo. P C ← mem S´ı C = 1. 36 JNC [mem] — Saltar si NO hay acarreo. P C ← mem S´ı C = 0. 37 JO [mem] — Saltar si hay desbordamiento. P C ← mem S´ı O = 1. 38 JNO [mem] — Saltar si NO hay desbordamiento. P C ← mem S´ı C = 0.
Entrada/Salida - C´ aracteres
60 ADDF [mem] — Incrementa (Bx,Ax) (@mem, @mem + 1). (Bx,Ax) ← (Bx,Ax) + (@mem, @mem + 1).
61 SUBF [mem] — Decrementa (Bx,Ax) con (@mem, @mem + 1). para CMP de Pto. Flotante (Bx,Ax) ← (Bx,Ax) − (@mem, @mem + 1). 62 MULF [mem] — Multiplica (Bx,Ax) (@mem, @mem + 1). (Bx,Ax) ← (Bx,Ax) × (@mem, @mem + 1).
40 LDT — Leer Ax desde el teclado. Ax ← Teclado.
64 ITOF — De Punto Fijo a Punto Flotante. (Bx,Ax) ← PuntoFlotante(Ax).
26 STC — Asignar 1 a la variable Carry. C ← 0.
41 EAP [msg] — Escribe en pantalla el mensaje y el contenido de Ax. Pantalla ← msg,Ax.
65 FTOI [mem] — De Punto Flotante a Punto Fijo. Ax ← PuntoFijo(Bx,Ax). Actualiza los valores de Z,N, O.
Saltos y Bucles 29 LOOP [mem] — Decrementar Cx y saltar a la direcci´on indicada si Cx no es 0. Cx ← Cx − 1 S´ı C x = 0 ⇒ P C ← mem. 30 JMP [mem] — Saltar a la direcci´on de memoria. P C ← mem. 31 JEQ [mem] — Saltar si es igual (Z=1) P C ← mem S´ı Z = 1. 32 CMP [mem] — Compara Ax con el valor almacenado en la direcci´ on de memoria. Actualiza los valores Z,N,C,O. Ejecuta Ax − @mem. 33 JME [mem] — Saltar Ax es menor.
42 MSG [msg] — Escribe en pantalla un mensaje. Pantalla ← msg.
Lectura secuencial de memoria 50 LDB [mem] — Cargar en Ax el valor almacenado en la direcci´ on mem+Bx. Ax ← @(mem + Bx). 51 STB [mem] — Almacenar el valor de Ax en la direcci´on de memoria mem+Bx. @(mem + Bx) ← Ax.
Aritm´ etica de Punto Flotante 55 LDF [mem] — Cargar 32 bits de memoria. (Bx,Ax) ← (@mem, @mem + 1). 56 STF [mem] — Almacena 32 bits de memoria. (@ + 1) (Bx,Ax)
por
63 DIVF [mem] — Divide (Bx,Ax) por (@mem, @mem+ 1). (Bx,Ax) ← (Bx,Ax)/(@mem, @mem + 1); Cx ← Residuo.
25 CLC — Asignar 0 a la variable Carry. C ← 0.
27 CMC — Complementar la variable Carry. C ← ¬C .
con
Entrada/Salida - Puertos 80 IN [reg, puerto] — Almacenar en un registro la siguiente lectura del puerto indicadoLeer del puerto indicado. reg ← @ puerto. 1: Teclado, 8: Reloj. 81 OUT [ puerto, reg] — Escribir el contenido de un registro en el puerto indicado. puerto ← @reg. 1: Pantalla.
Otras 90 NOP — Instrucci´ on Nula. ´Util para anular instrucciones en tiempo de ejecuci´on. 91 HLT — Fin de programa. Todo programa debe terminar. xx #[mem] — (Editor) Forzar la direcci´on de memoria donde se escribe el resto del texto. Comentario.
Quickref - SimuProc (versi´on: 1 de junio de 2016)
Mnem´ onicos
3
ADD: ADD (Sumar).
LDT: Leer De Teclado.
LDA: LoaD (Cargar) A=Registro Ax.
SUB: SUBstract (Substraer).
EAP: Escribir Ax en Pantalla.
STA: STore (Guardar) A.
MUL: MULtiply (Multiplicar).
MSG: MeSsaGe (Mensaje).
XBA: eXchange (Intercambiar), B=Registro Bx
DIV: DIVide (Dividir).
LDB: LoaD B (para Vectores).
CLA: CLear (Limpiar) A.
CLN: CLear N (Negative).
STB: STore B (para Vectores).
PUSH: PUSH (Empujar).
CLC: CLear C (Carry).
LDF: LoaD Float (N´umero de punto flotante).
POP: POP (”Sacar de arriba”).
STC: STore C.
STF: STore Float.
INC: INCRement (Incrementar).
CMC: CoMplement (Complementar) C.
ADDF: ADD Float.
DEC: DECrement (Decrementar).
LOOP: LOOP (Bucle)
SUBF: SUBstract Float.
MOV: MOVe (Mover).
JMP: JuMP (Saltar).
MULF: MULtiply Float.
AND: AND (Y).
JEQ: Jump (Saltar) s´ı EQual (Igual).
DIVF: DIVide Float.
NOT: NOT (No).
CMP: CoMPare (Comparar).
ITOF: Integer (Entero) TO (a) Float.
OR: OR (O).
JME: Jump s´ı MEnor.
FTOI: Float TO Integer.
´ XOR: eXclusive OR (O exclusivo, O).
JMA: Jump s´ı MAyor.
IN: IN (Entrada).
ROL: ROtate Left (Rotar a Iquierda).
JC: Jump s´ı C (en C=1).
OUT: OUT (Salida).
ROR: ROtate Right (Rotar a Derecha).
JNC: Jump s´ı Not C (en C=0).
SHL: SHift Left (Desplazar a Izquierda).
JO: Jump s´ı O (Overflow) (en O=1).
SHR: SHift Right (Desplazar a Derecha).
JNO: Jump s´ı Not O (en O=0).
NOP: Null OPeration (Operaci´on Nula). HLT: Halt (Detenerse).