Tipos de Registros en Lenguaje Ensamblador
¿Que son los registros?
Vídeos de los tipos de Registros:
Los registros de datos, como su nombre indica, contienen generalmente datos. Los registros del procesador son una porción de memoria ultrarrápida, se emplean para:
• Controlar instrucciones en ejecución.
• Manejar direccionamiento de memoria.
• Proporcionar capacidad aritmética.
Tipos de registros:
Uno puede mover los datos de unos registros a otros con prácticamente total libertad. También podremos realizar operaciones sobre ellos, como sumar el contenido de BX y DX para guardar el resultado en DX, y cosas así. La primera restricción al respecto (y bastante razonable) es que los operandos tendrán que ser del mismo tamaño (no podremos sumar BX con DH, por ejemplo).
Registros de uso general:
- AX: Acumulador (AL:AH)
- BX: Registro base (BL:BH)
- CX: Registro contador (CL:CH)
- DX: Registro de datos (DL:DH)
Cada registro de estos está dividido a su vez en dos registros de 8 bits, que pueden ser leídos o escrito de manera independiente:
- AX = AH | AL BX = BH | BL
- CX = CH | CL DX = DH | DL
Registros de segmento (Solo se pueden usar para los usos mencionados a excepción de ES):
- DS: Registro del segmento de datos
- ES: Registro del segmento extra
- SS: Registro del segmento de pila
- CS: Registro del segmento de código
Registros punteros (También pueden tener uso general):
- BP: Registro de apuntadores base
- SI: Registro índice fuente
- DI: Registro índice destino
Registros especiales (Solo se pueden usar para los usos mencionados):
- SP: Registro apuntador de la pila
- IP: Registro apuntador de la siguiente instrucción
- F: Registro de banderas (8 bits)
Bits del registro de banderas:
Overflow
- NV (Apagado): No hay desbordamiento
- OV (Encendido): Si lo hay
Direction
- UP: Hacia adelante
- DN: Hacia atras
Interrupts
- DI: Desactivadas
- EI: Activadas
Sign
- PL: Positivo
- NG: Negativo
Zero
- NZ: No es cero
- ZR: Si lo es
Auxilary carry
- NA: No hay acarreo auxiliar
- AC: Hay acarreo auxiliar
Parity
- PO: Impar
- PE: Paridad par
Carry
- NC: No hay acarreo
- CY: Si lo hay
Vídeos de los tipos de Registros:
Instrucciones del lenguaje ensamblador (NASM)
Instrucción MOV (MOVe):
Mueve o transfiere un byte o una palabra desde el operando fuente al operando destino. El dato transferido se copia, por lo que no desaparece del operando fuente. Tanto el operando fuente como el operando destino pueden ser un registro o un elemento de memoria. El operando fuente puede ser un valor inmediato.
INSTRUCCIONES ARITMÉTICAS
Instruccione INC (INCrement):
Incrementa (suma 1 a) el contenido de un registro o de una posición de memoria.
Instruccion DEC (DECrement):
Decrementa (resta 1 a) el contenido de un registro o de una posición de memoria.
Instruccion ADD (ADDition):
Suma al operando de destino el valor o contenido del operando fuente, almacenándose el resultado en el operando de destino. Ambos operandos han de ser del mismo tamaño (byte o palabra).
Instruccion SUB (SUBstract):
Resta al operando de destino el valor o contenido del operando fuente, almacenándose el resultado en el operando de destino. Ambos operandos han de ser del mismo tamaño (byte o palabra).
Instrucciones MUL (MULTiply) e IMUL:
Realiza una multiplicación con el acumulador. Si se realiza con AL, el operando de la instrucción debe ser de 8 bits, y ambos generan un resultado de 16 bits que se almacena en el registro AX. Sin embargo, si se realiza con AX, el operando de la instrucción debe ser de 16 bits, con lo que el resultado será de 32 bits y se almacenará en el par de registros DX (palabra de mayor peso) yAX (palabra de menor peso).
La diferencia entre MUL e IMUL, es que la instrucción MUL realiza una multiplicación sin signo (sin complemento a dos), mientras que la instrucción IMUL realiza una multiplicación con signo (con complemento a dos).
Instrucciones DIV (DIVide) e IDIV:
Realiza una división entre un número de 16 bits y otro de 8 bits, o entre un número de 32 bits y otro de 16 bits.
En el primer caso, el dividendo ha de estar en el registro AX, y el divisor será el operando, con un tamaño de 8 bits. Como resultado, el cociente de 8 bits se almacena en AL, y el resto de 8 bits se almacena en AH.
En el segundo caso, el dividendo ha de estar en la pareja de registros DX (palabra de mayor peso) y AX (palabra de menor peso), y el divisor ser el operando, con un tamaño de 16 bits. Como resultado, el cociente de 16 bits se almacena en AX, y el resto de 16 bits se almacena enDX.
La diferencia entre DIV e IDIV es que la instrucción DIV realiza una división sin signo (sin complemento a dos), mientras que la instrucción IDIV realiza una división con signo (con complemento a dos).
INSTRUCCIONES LÓGICAS
Instruccion NOT (NOT):
Realiza un NOT lógico, bit a bit, con el operando, es decir, que invierte el valor de cada uno de los bits del operando.
Instruccion AND (AND):
Realiza un AND lógico, bit a bit, entre el operando destino y el operando fuente, almacenando el resultado en el operando destino. Como la filosofía de esta operación es "valor 1 si los dos bits son 1", se puede utilizar como máscara, filtrando sólo aquellos bits (1) del primer operando que coincidan con los bits (1) del segundo operando.
Instruccion OR (OR):
Realiza un OR lógico, bit a bit, entre el operando destino y el operando fuente, almacenando el resultado en el operando destino. La filosofía de esta operación es "valor 0 si los dos bits son 0". Su utilidad es poner algunos bits a 1, inalterando el resto.
Instrucción XOR (eXclusive OR):
Realiza un XOR lógico, bit a bit, entre el operando destino y el operando fuente, almacenando el resultado en el operando destino. La filosofía de esta operación es "valor 0 si los dos bits son iguales". Su utilidad es invertir el valor de algunos bits, inalterando el resto; o bien hacer un XOR consigo mismo para poner el operando a 0.
Instrucción LOOP:
Gestiona un bucle, tomando el registro CX como contador del mismo. En sí, la instrucción LOOPdecrementa el valor de CX y, si no es igual a cero, salta a la etiqueta especificada.
INSTRUCCIONES DE SALTO INCONDICIONAL.
Instrucción JMP (JuMP):
Realiza un salto de ejecución incondicional hacia la dirección o etiqueta especificada.
Instrucciónes CALL Y RET (RETurn):
Realiza un salto incondicional hacia la dirección, etiqueta o procedimiento especificado. A diferencia de la instrucción JMP, la instrucción CALL realiza un salto a una subrutina con retorno. El salto puede ser cercano o lejano.
Comentarios
Publicar un comentario