Registros, Operaciones y Programación en Ensamblador: Conceptos Básicos
Enviado por Enrique y clasificado en Informática
Escrito el en español con un tamaño de 9,5 KB
1. Tamaño en Bits de los Registros
A continuación, se detalla el tamaño en bits para cada parte de los siguientes registros:
32-Bits | 16-Bits | 8-Bits | 8-Bits |
EAX → | AX | AH | AL |
EBX → | BX | BH | BL |
ECX → | CX | CH | CL |
EDX → | DX | DH | DL |
2. Instrucciones para la O Inclusiva y la O Exclusiva
En ensamblador, las instrucciones para realizar estas operaciones son:
- O Inclusiva (OR): Se utiliza la instrucción
OR
. - O Exclusiva (XOR): Se utiliza la instrucción
XOR
.
La indica que el resultado es verdadero si al menos uno de los operandos es verdadero (puede ser A o B, o ambos). La indica que el resultado es verdadero si solo uno de los operandos es verdadero (A o B, pero no ambos).
3. Tabla de Verdad para la O Exclusiva (XOR)
A continuación, se presenta la tabla de verdad para la operación XOR, junto con las tablas de verdad para AND y OR para comparación:
A | B | AND (Y) | OR (O Inclusiva) | XOR (O Exclusiva) |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
4. Diferencia entre las Instrucciones NEG y NOT
Las instrucciones NEG
y NOT
realizan operaciones diferentes:
Instrucción NEG
- Propósito: Genera el complemento a 2 de un número.
- Sintaxis:
NEG destino
- Descripción: Esta instrucción calcula el negativo de un número en su representación binaria de complemento a 2. El resultado se almacena en el mismo operando de destino. Por ejemplo,
NEG AX
calcula el complemento a 2 del valor enAX
y lo guarda enAX
.
Instrucción NOT
- Propósito: Realiza la negación bit a bit de un operando.
- Sintaxis:
NOT destino
- Descripción: Esta instrucción invierte cada bit del operando de destino. Los 0s se convierten en 1s y los 1s se convierten en 0s. Por ejemplo,
NOT AX
invierte todos los bits del valor enAX
.
5. Tamaño en Bits de los Tipos de Datos
Los tamaños en bits para los tipos de datos comunes en ensamblador son:
- BYTE: 8 bits
- WORD: 16 bits
- DWORD: 32 bits
- QWORD: 64 bits
6. Descripción de las Instrucciones de Salto
Las instrucciones de salto permiten alterar el flujo de ejecución de un programa:
- JMP: Salto incondicional. Siempre se realiza el salto.
- JZ: Salta si el resultado de la operación anterior es cero.
- JNZ: Salta si el resultado de la operación anterior es distinto de cero.
- JS: Salta si el resultado de la operación anterior es negativo (bit de signo activado).
- JNS: Salta si el resultado de la operación anterior es positivo o cero (bit de signo desactivado).
8. Resultado de las Operaciones en Ensamblador
A continuación, se describe el resultado de cada operación:
- ADD destino, fuente: Suma el valor de fuente al valor de destino. El resultado se almacena en destino. Ejemplo:
ADD AX, BX
(AX
=AX
+BX
) - SUB destino, fuente: Resta el valor de fuente al valor de destino. El resultado se almacena en destino. Ejemplo:
SUB AX, BX
(AX
=AX
-BX
) - INC destino: Incrementa el valor de destino en 1. Ejemplo:
INC AX
(AX
=AX
+ 1) - DEC destino: Decrementa el valor de destino en 1. Ejemplo:
DEC AX
(AX
=AX
- 1) - NEG destino: Calcula el complemento a 2 del valor de destino. Ejemplo:
NEG AX
(AX
= -AX
en complemento a 2) - AND destino, fuente: Realiza la operación AND bit a bit entre destino y fuente. El resultado se almacena en destino. Consulte la tabla de verdad en el punto 3.
- OR destino, fuente: Realiza la operación OR bit a bit entre destino y fuente. El resultado se almacena en destino. Consulte la tabla de verdad en el punto 3.
- XOR destino, fuente: Realiza la operación XOR bit a bit entre destino y fuente. El resultado se almacena en destino. Consulte la tabla de verdad en el punto 3.
- NOT destino: Invierte cada bit del operando destino.
9. Programa en Ensamblador para Resolver Ecuaciones
El siguiente programa en ensamblador resuelve la ecuación: -(x + y - 2z + 1)
.586 ; usar operandos de 32 bits.MODEL FLAT ; modelo de memoria plana.STACK 4096 ; reservar 4096 bytes para la pila.DATA ; inicia la sección de datosx DWORD 34 ; declarar una variable de 32 bits de nombre x = 34y DWORD 17 ; declarar una variable de 32 bits de nombre y = 17z DWORD 14 ; declarar una variable de 32 bits de nombre z = 14.CODE ; inicia la sección de códigomain PROC ; inicia el procedimiento de nombre mainmov eax, x ; mover el valor de x al registro eaxadd eax, y ; sumar el valor de y al valor del registro eax (x + y)mov ebx, z ; mover el valor de z al registro ebxadd ebx, ebx ; sumar el valor de z al valor del registro ebx (2z)sub eax, ebx ; restar de eax el valor de ebx (x + y - 2z)inc eax ; añadir 1 al valor del registro eax (x + y - 2z + 1)neg eax ; negar el valor contenido en eax -(x + y - 2z + 1)mov eax, 0 ; terminar el programa con código de salida 0retmain ENDP ; termina el procedimiento mainEND