Registros del Procesador y sus Funciones en Assembler


0+0=0 0+1=1 1+0=1 1+1=10 10+1=11

Registros de Propósito General

AX, Acumulator: Sirve para hacer todas las operaciones aritméticas, y algunas, como Multiplicar y Dividir, le son exclusivas. AX (y AL por su versión de un solo byte) son los únicos registros que pueden ser multiplicados y divididos por otro registro. La resta de AX y AL, por ejemplo, ocupan un byte menos que la de cualquier otro registro, pero esto no es para preocuparse, un byte, realmente no es nada, por más que se acumule.

BX, Base Index: Sirve para ser usado como registro de base para un índice o array, es decir, una posición de memoria puede ser apuntada por BX (su offset), igualmente también se lo puede usar para hacer sumas, restas y todo tipo de operaciones lógicas. AX, CX y DX no sirven para apuntar a memoria.

CX, Counter: Es el registro reservado para contar, como su nombre lo indica. Para este propósito hay órdenes especiales que lo decrementan o incrementan y hacen algo según el resultado. También hay ciertas órdenes repetitivas que necesitan saber cuánto repetirse, por medio de CX (o CL en su versión Byte) se les indica.

DX, Data: Este registro no tiene definido un uso, en general es utilizado para pasar ciertos parámetros, pero sí cumple una función, por ejemplo en la multiplicación, si se multiplica AX=1000h (un Word) por, simplemente 10h (un Byte) el resultado es 00010000h (Un DWord), entonces, el Word Alto del resultado de la multiplicación se deposita en DX, y el Bajo en AX.

SI, Source Index: Puede ser utilizado como índice a posiciones de memoria, es decir se puede poner un número en SI (Offset) y leer el dato de esta posición. Pero a la vez tiene una función específica, la de Registro Fuente para las órdenes de tratamiento de cadenas. Hay ciertas órdenes en Assembler que son para, por ejemplo mover toda una cadena de bytes, de un lugar a otro, la dirección de la cual se leen los bytes se pone en SI antes de decir que lea.

DI, Destination Index: Como SI, puede ser usado como índice. Pero su función específica es la de Registro de Destino para las operaciones de cadena, lo que se lee de el contenido de SI (no de SI mismo, sino de la posición de memoria a la que apunta SI) es depositado en la posición de memoria a la que apunta DI, expresada por [DI]. A la vez, igual que con SI, se pueden hacer operaciones aritméticas simples (suma y resta), y también todo tipo de operaciones lógicas (AND, OR, XOR).

BP, Base Pointer: Puntero a una posición de memoria, muy parecido a BX, pero generalmente usado para facilitar el pasaje de parámetros en funciones hechas con lenguajes de alto nivel, por una característica propia que ya voy a explicar.

SP, Stack Pointer: Puntero que indica en qué Offset termina el Stack, o pila. El Stack, es un área de la memoria principal de la máquina, (no está dentro del Micro, ni tampoco es fija) que sirve para preservar cosas, la estructura del Stack, que ya explicaré más a fondo, es simple, esta estructura es llamada LIFO (Last In First Out) o lo que es lo mismo, lo último que entra, es lo primero que sale, es como si tuviéramos una pila de cosas, lo último que apoyamos arriba va a ser lo primero que podamos sacar después. Si no está claro, no se preocupen, ya voy a explicarlo bien, y voy a decir para qué se usa, y cuándo.

IP, Instruction Pointer: El puntero de instrucción es el que le indica al Micro cuál va a ser la próxima instrucción que debe ejecutar (Solo el Offset). El programa en Assembler tiene una estructura lógica, la cual se puede seguir. IP comienza al principio del programa (la próxima orden que se debe ejecutar es la primera del programa), se ejecuta esa orden e IP es incrementado tanto como Bytes ocupe la orden recién ejecutada (no todas las órdenes ocupan un byte) luego sigue con la próxima y así sucesivamente. Si pudiéramos de alguna forma cambiar el contenido de IP lo que estaríamos haciendo sería una desviación, o un Jump (salto) a otro lado del programa, y efectivamente se puede hacer esto, pero no diciendo IP = 1234h, sino haciendo un salto, que es equivalente a esto último: JMP 1234h. Ya lo voy a explicar, esto también.

Registros de Segmento

CS, Current Segment: Es el Segmento actual de ejecución, juntos CS:IP apuntan a la próxima orden que el Micro debe leer para ejecutar

DS, Data Segment: Es el segmento destinado a ser usado junto con BX, SI y DI para apuntar a una dirección de memoria. También puede ser usado con BP y SP, pero hace falta expresarlo concretamente. (Más adelante aclaro esto)

ES, Extra Segment: Es un segmento Extra para ser utilizado cuando haga falta. También tiene una función propia: Junto con DI indican el destino en las «órdenes de cadena» (el dato leído de DS:SI es puesto en ES:DI, en las ordenes de movimiento).

SS, Stack Segment: El segmento de Stack; junto con SP apuntan a la última posición que fue utilizada para «depositar» datos en el Stack.

Registro de Banderas (Flags)

Flags: Es un registro especial en el cual se guardan los resultados de la última operación matemática o de comparación. No se guardan los resultados numéricos, solo los de estado.

FlagNombreDescripción
CFCarry FlagBandera de Acarreo
PFParity FlagBandera de Paridad
AFAuxiliary FlagBandera Auxiliar
ZFZero FlagBandera por Cero
SFSign FlagBandera de Signo
TFTrap FlagBandera de Paso Simple
IFInterrupt FlagBandera de Interrupción
DFDirection FlagBandera de Dirección
OFOverflow FlagBandera por Sobre flujo
IOPLI/O Privilege LevelSolo en 286 o superior
NTNested Task FlagSolo en 286 o superior
RFResume FlagSolo en 386 o superior
VMVirtual Mode FlagSolo en 386 o superior

Preguntas y Respuestas

– ¿Cuál es el contenido informativo de una instrucción?

El contenido informativo de una instrucción son direcciones de memoria, que contiene los datos que luego serán utilizados por dicha instrucción.

– ¿Por qué las instrucciones de una secuencia deben estar en posiciones consecutivas y los datos no?

Porque es la única manera que tiene la máquina de poder ejecutar instrucciones consecutivas y poder encontrar la siguiente instrucción. Los datos no requieren esta condición ya que son accedidos y leídos mediante direcciones de memoria.

– ¿Por qué en el tp2 y tp3 se usan los mismos códigos de operación?

Por 2 motivos: porque los enteros se representan mediante naturales y porque las cuentas de naturales tienen internamente cuentas de enteros.

– Cuando en un computador se debe hacer b – (-q) ¿qué parte del sistema hace la resta y qué parte concreta el número negativo?

El número dentro del paréntesis es el que se hace primero para poder guardar el valor en la memoria, luego se procesa el de afuera del paréntesis en la UAL (Unidad Aritmética Lógica).

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *