Registros de la CPU
Registros de Propósito General
- AX (acumulador): Registro principal, utilizado para operaciones de E/S, instrucciones de multiplicar y dividir, correcciones decimales.
- BX (base): Registro base para referenciar direcciones de memoria indirectamente.
- CX (contador): Contador en bucles y operaciones repetitivas de cadenas.
- DX (datos): En conjunto con AX en operaciones de multiplicación y división.
Registros Punteros
- SP (puntero de pila): Apunta a la cabeza de la pila, utilizado en instrucciones de manejo de la pila.
- BP (puntero base): Puntero a una zona dentro de la pila que almacena datos.
Registros Índices
- SI (índice fuente): Registro índice de ciertos modos de direccionamiento indirecto. Sirve como puntero destino.
- DI (índice destino): Registro que sirve como índice destino para operaciones con cadenas.
Puntero de Instrucciones
- IP (puntero de instrucciones): Marca el desplazamiento de la instrucción en curso del segmento de código. Es automáticamente modificado con la lectura de una instrucción.
Registros de Segmentos
CS, DS, ES, FS, GS, SS
Registros de Banderas (Flags)
- PSW (Programa Status Word): Contiene bits que la CPU necesita como son los bits de condición. Estos bits se ajustan a cada ciclo de la ALU, reflejando la situación de estado más reciente.
Bits
- N: Se enciende si el resultado fue negativo.
- Z: Se enciende si el resultado fue cero.
- V: Se enciende si el resultado causó un desbordamiento.
- C: Se enciende si el resultado causó un acarreo de salida del bit de extrema izquierda.
- A: Se enciende si hubo un acarreo de salida del bit 3 (acarreo auxiliar).
- P: Se enciende si el resultado tuvo paridad par.
Formato de Instrucciones
Cuatro formatos de instrucción (los más usados): Cod.Op, Cod.Op-Dir, Cod.Op, Dir1, Dir2, etc.
Formato de instrucciones II
Las instrucciones de una CPU a otra difieren bastante, sin embargo, en todas las CPU se puede encontrar el siguiente conjunto:
- Instrucciones de transferencias de datos.
- Instrucciones aritméticas.
- Instrucciones lógicas.
- Control de flujo.
- Entrada / Salida.
1. Instrucciones de Transferencia de Datos
Transfiere datos de una posición a otra. Si se implica a la memoria: Determina la dirección de la memoria. Inicia lectura/escritura en memoria.
- MOVE: Transferir registros en la CPU.
- STORE: Registro → memoria.
- LOAD: Memoria → registro.
- CLEAR: Deja un registro en cero.
- SET: Deja un registro en uno.
- PUSH: Introduce en la pila.
- POP: Extrae de la pila.
2. Instrucciones Aritméticas
Puede implicar transferencias de datos, antes y/o después. Realiza la operación en la ALU. Actualiza códigos e indicadores de condición.
- ADD: Suma dos operandos.
- SUBSTRACT: Resta dos operandos.
- MULTIPLY: Multiplica dos operandos.
- DIVIDE: Divide dos operandos.
- ABSOLUTE: Calcula valor absoluto del operando.
- NEGATE: Cambia el signo del operando.
- INCREMENT: Sube en 1 el operando.
- DECREMENT: Baja en 1 el operando.
Instrucciones Lógicas
- AND: Y lógico bit a bit.
- OR: O lógico bit a bit.
- NOT: No lógico bit a bit.
- XOR: O exclusivo lógico bit a bit.
- TEST: Evalúa condiciones.
- COMPARE: Comparación de dos operandos.
- SHIFT: Desplazamiento izquierda o derecha.
- ROTATE: Desplazamiento cíclico.
Control de Flujo
- JUMP: Salto incondicional.
- JUMP CON: Salto condicional.
- JUMP SUB: Salto a subrutina.
- RETURN: Retorno de subrutina.
- SKIP: Incrementa PC en 1.
- SKIP CON: Incremento condicional de PC en 1.
- HALT: Detiene la ejecución del programa.
- WAIT: Detiene la ejecución hasta una condición.
- NOP: No ejecuta operación alguna.
Entrada/Salida
- INPUT: Transferir I/O → memoria o registro.
- OUTPUT: Transferir memoria o registro → I/O.
- START I/O: Inicializa dispositivo I/O.
- TEST I/O: Transfiere información de estado de I/O.
Modos de Direccionamiento
Direccionamiento Inmediato
Copia una palabra o byte a un registro.
Mov AX, 10 10 → AX
Mov AL, 10 10 → AL
No hay referencia adicional a memoria. Rápido. Registros a los cuales no se puede hacer un direccionamiento inmediato:
- Registro de segmento: es, ds, cs, ss.
- Puntero de instrucción: ip.
Direccionamiento Directo
De address a operando en memoria. El operando está en la dirección de memoria N. Ejemplo: ADD (941). Hay sólo un acceso en memoria.
Direccionamiento Indirecto
De address a puntero operando y a operando en memoria. Operando está en la memoria que direcciona la memoria direccionada por N. Operando = ((N)). Direccionamiento lento. Múltiples accesos a memoria para encontrar el operando.
Direccionamiento Registro
De dirección de reg a operando memoria. El operando es un registro de CPU. Instrucción corta. Instrucción rápida. No hay acceso a memoria. Espacio de direcciones limitados.
Direccionamiento Indirecto con Registro
De dir de reg a punt. operando en reg y de ahí a op. en memoria. El operando está en memoria direccionada por un registro. Hay un acceso menos en memoria que en direccionamiento indirecto.