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).