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:

ABAND (Y)OR (O Inclusiva)XOR (O Exclusiva)
00000
01011
10011
11110

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 en AX y lo guarda en AX.
  • 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 en AX.

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

Entradas relacionadas: