Uploaded by mateo.cardona20890

APznzab4xwfJF5z8t7xcABorV79nVIxTp6c5pCgZYHtoZnvA7bOO0GhpHHXr58DPkErICfL7-jjzrCHc1HkIiEhDN-dHMmoUDsQufbih4CE7Y80zJlr-67SfzruV-nW3HnSJJD3 gvvx53 -WdafyEBhzNzn7k7Rkbx3I1j6Ssf3P-JvAlaGhu rRIpKWkqUjOi18RRpXScdUfnMeOU8

advertisement
Quickref - SimuProc (versión: 1 de junio de 2016)
Descripción
Esta es una guı́a de referencia rapida de las instrucciones
del programa SimuProc, no es un reemplazo de la documentación del programa.
1
Registros y variables del procesador
Ax Acumulador.
Bx Proposito general, lectura/escritura de vectores.
Cx Contador, bucles.
Formato utilizado
XX INSTRUCCIÓN [param] — Descripción.
Expresión resumida.
XX es el número de instrucción.
INST es el nombre de la instrucción.
param puede ser1 :
Z
N
C
O
(Zero) Resultado 0.
(Negative) Resultado negativo.
(Carry) Resultado con acarreo.
(Overflow) Resultado con desbordamiento.
PC Contador de programa: Dirección de memoria de la proxima instrucción a ejecutar.
SP Puntero de pila: Dirección de memoria del tope de pila.
• reg un registro.
BP Inicio de la pila: A partir de que dirección de memoria
se construye la pila.
• orig un registro o dirección memoria de origen.
• msg un mensaje para la pantalla.
• n para indicar un número natural.
• puerto, para instrucciones de entrada/salida.
MAR Registro de Dirección de Memoria. Dirección del dato a
leer o escribir por la instrucción.
MDR Registro de Datos de Memoria. Registro del CPU conectado al bus de datos.
IR Registro de Instrucción. La instrucción siendo ejecutada.
Nomenclatura
Pseudocódigo:
Instrucciones
X ← Y := Asignar a X el valor de Y.
Acumulador
@X := Valor contenido en X.
*
X ) Y := Intercambiar los valores de X e Y.
X N := Empujar N bits a izquierda,
completando con ceros a derecha.
¬X := Negar el contenido de X.
separados por coma. En el orden es obligatorio.
08 INC [dest] — Incrementa en 1.
INC Ax == Ax ← Ax + 1.
09 DEC [dest] — Decrementa en 1.
DEC Ax == Ax ← Ax − 1.
10 MOV [dest, orig] — Copiar orig en dest.
dest ← orig.
11 AND [dest, orig] — Conjunción lógica (Y).
dest ← dest ∧ orig.
12 NOT [dest] — Negación lógica (No).
dest ← ¬dest.
13 OR [dest, orig] — Disyunción lógica (O).
dest ← dest ∨ orig.
14 XOR [dest, orig] — Disyunción lógica exclusiva (Ó).
dest ← dest ∨ orig.
15 ROL [dest, n] — Rotación a izquierda.
dest ← dest ←- n.
16 ROR [dest, n] — Rotación a derecha.
dest ← dest ,→ n.
17 SHL [dest, n] — Desplazamiento a izquierda.
dest ← dest n.
02 STA [mem] — Almacenar Ax en memoria.
@mem ← Ax
18 SHR [dest, n] — Desplazamiento a derecha.
dest ← dest n.
03 XBA — Intercambiar Ax y Bx.
Ax *
) Bx
04 CLA — Limpiar el valor de Ax, o asignarle 0.
Ax ← 0
1 parámetros
07 POP [reg] — Quitar el tope, guardarlo en un registro.
reg ← @SP ; SP ← SP + 1.
01 LDA [mem] — Cargar Ax de memoria.
Ax ← @mem
X ←- N := Empujar N bits a izquierda,
completando con los bits empujados a derecha.
06 PUSH [reg] — Apilar el valor del registro.
@SP ← reg; SP ← SP − 1.
Flags Banderas asociadas a la ultima operación de la ALU.
• mem una dirección de memoria (hexademial).
• dest un registro o dirección memoria de destino.
Uso general
Quickref - SimuProc (versión: 1 de junio de 2016)
Aritmética 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úmero es muy grande (O = 1)se usa Bx para la parte más 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áracteres
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 ← T eclado.
64 ITOF — De Punto Fijo a Punto Flotante.
(Bx, Ax) ← P untoF lotante(Ax).
26 STC — Asignar 1 a la variable Carry.
C ← 0.
41 EAP [msg] — Escribe en pantalla el mensaje y el contenido de Ax.
P antalla ← msg, Ax.
65 FTOI [mem] — De Punto Flotante a Punto Fijo.
Ax ← P untoF ijo(Bx, Ax).
Actualiza los valores de Z, N, O.
42 MSG [msg] — Escribe en pantalla un mensaje.
P antalla ← msg.
Saltos y Bucles
29 LOOP [mem] — Decrementar Cx y saltar a la dirección
indicada si Cx no es 0.
Cx ← Cx − 1 Sı́ Cx 6= 0 ⇒ P C ← mem.
30 JMP [mem] — Saltar a la dirección 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ón de memoria.
Actualiza los valores Z, N, C, O.
Ejecuta Ax − @mem.
33 JME [mem] — Saltar Ax es menor.
P C ← mem Sı́ Z = 0 ∧ N = 1.
Lectura secuencial de memoria
50 LDB [mem] — Cargar en Ax el valor almacenado en la
dirección mem+Bx.
Ax ← @(mem + Bx).
51 STB [mem] — Almacenar el valor de Ax en la dirección
de memoria mem+Bx.
@(mem + Bx) ← Ax.
Aritmética de Punto Flotante
55 LDF [mem] — Cargar 32 bits de memoria.
(Bx, Ax) ← (@mem, @mem + 1).
56 STF [mem] — Almacena 32 bits de memoria.
(@mem, @mem + 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ón Nula. Útil para anular instrucciones
en tiempo de ejecución.
91 HLT — Fin de programa. Todo programa debe terminar.
xx #[mem] — (Editor) Forzar la dirección de memoria donde se escribe el resto del texto. Comentario.
xx ; msg — (Editor) Agregar un comentario al código.
Quickref - SimuProc (versión: 1 de junio de 2016)
Mnemónicos
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úmero 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, Ó).
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).
NOP: Null OPeration (Operación Nula).
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).
HLT: Halt (Detenerse).
Download