Montaje - Introducción

¿Qué es el lenguaje ensamblador?

Cada computadora personal tiene un microprocesador que administra las actividades aritméticas, lógicas y de control de la computadora.

Cada familia de procesadores tiene su propio conjunto de instrucciones para manejar diversas operaciones, como obtener entradas desde el teclado, mostrar información en la pantalla y realizar otros trabajos. Este conjunto de instrucciones se denominan "instrucciones en lenguaje de máquina".

Un procesador solo entiende las instrucciones en lenguaje de máquina, que son cadenas de unos y ceros. Sin embargo, el lenguaje de máquina es demasiado oscuro y complejo para usarlo en el desarrollo de software. Entonces, el lenguaje ensamblador de bajo nivel está diseñado para una familia específica de procesadores que representa varias instrucciones en código simbólico y en una forma más comprensible.

Ventajas del lenguaje ensamblador

Tener una comprensión del lenguaje ensamblador hace que uno sea consciente de:

  • Cómo interactúan los programas con el sistema operativo, el procesador y el BIOS;
  • Cómo se representan los datos en la memoria y otros dispositivos externos;
  • Cómo el procesador accede y ejecuta la instrucción;
  • Cómo las instrucciones acceden y procesan los datos;
  • Cómo un programa accede a dispositivos externos.

Otras ventajas de usar el lenguaje ensamblador son:

  • Requiere menos memoria y tiempo de ejecución;

  • Permite trabajos complejos específicos de hardware de una manera más sencilla;

  • Es adecuado para trabajos de tiempo crítico;

  • Es más adecuado para escribir rutinas de servicio de interrupción y otros programas residentes en memoria.

Características básicas del hardware de PC

El hardware interno principal de una PC consta de procesador, memoria y registros. Los registros son componentes del procesador que contienen datos y direcciones. Para ejecutar un programa, el sistema lo copia del dispositivo externo a la memoria interna. El procesador ejecuta las instrucciones del programa.

La unidad fundamental del almacenamiento informático es un poco; podría ser ON (1) u OFF (0) y un grupo de 8 bits relacionados forma un byte en la mayoría de las computadoras modernas.

Entonces, el bit de paridad se usa para hacer que el número de bits en un byte sea impar. Si la paridad es par, el sistema asume que ha habido un error de paridad (aunque es poco común), que puede deberse a una falla de hardware o una perturbación eléctrica.

El procesador admite los siguientes tamaños de datos:

  • Palabra: un elemento de datos de 2 bytes
  • Palabra doble: un elemento de datos de 4 bytes (32 bits)
  • Quadword: un elemento de datos de 8 bytes (64 bits)
  • Párrafo: un área de 16 bytes (128 bits)
  • Kilobyte: 1024 bytes
  • Megabyte: 1.048.576 bytes

Sistema de números binarios

Cada sistema numérico usa notación posicional, es decir, cada posición en la que se escribe un dígito tiene un valor posicional diferente. Cada posición es la potencia de la base, que es 2 para el sistema numérico binario, y estas potencias comienzan en 0 y aumentan en 1.

La siguiente tabla muestra los valores posicionales para un número binario de 8 bits, donde todos los bits están activados.

Valor de bit 1 1 1 1 1 1 1 1
Posicionar el valor como potencia de base 2 128 64 32 dieciséis 8 4 2 1
Número de bits 7 6 5 4 3 2 1 0

El valor de un número binario se basa en la presencia de 1 bits y su valor posicional. Entonces, el valor de un número binario dado es -

1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255

que es lo mismo que 2 8 - 1.

Sistema numérico hexadecimal

El sistema numérico hexadecimal usa la base 16. Los dígitos en este sistema varían de 0 a 15. Por convención, las letras de la A a la F se usan para representar los dígitos hexadecimales correspondientes a los valores decimales del 10 al 15.

Los números hexadecimales en informática se utilizan para abreviar representaciones binarias extensas. Básicamente, el sistema numérico hexadecimal representa un dato binario dividiendo cada byte por la mitad y expresando el valor de cada medio byte. La siguiente tabla proporciona los equivalentes decimal, binario y hexadecimal:

Número decimal Representación binaria Representación hexadecimal
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 UNA
11 1011 segundo
12 1100 C
13 1101 re
14 1110 mi
15 1111 F

Para convertir un número binario en su equivalente hexadecimal, divídalo en grupos de 4 grupos consecutivos cada uno, comenzando por la derecha, y escriba esos grupos sobre los dígitos correspondientes del número hexadecimal.

Example - El número binario 1000 1100 1101 0001 es equivalente a hexadecimal - 8CD1

Para convertir un número hexadecimal en binario, simplemente escriba cada dígito hexadecimal en su equivalente binario de 4 dígitos.

Example - El número hexadecimal FAD8 es equivalente a binario - 1111 1010 1101 1000

Aritmética binaria

La siguiente tabla ilustra cuatro reglas simples para la suma binaria:

(yo) (ii) (iii) (iv)
1
0 1 1 1
+0 +0 +1 +1
= 0 = 1 = 10 = 11

Las reglas (iii) y (iv) muestran un acarreo de 1 bit a la siguiente posición izquierda.

Example

Decimal Binario
60 00111100
+42 00101010
102 01100110

Un valor binario negativo se expresa en two's complement notation. De acuerdo con esta regla, convertir un número binario a su valor negativo es invertir sus valores de bits y sumar 1 .

Example

Número 53 00110101
Invertir los bits 11001010
Agregar 1 0000000 1
Número -53 11001011

Para restar un valor de otro, convierta el número que se resta al formato de complemento a dos y sume los números .

Example

Restar 42 de 53

Número 53 00110101
Número 42 00101010
Invertir los bits de 42 11010101
Agregar 1 0000000 1
Número -42 11010110
53 - 42 = 11 00001011

Se pierde el desbordamiento del último bit.

Direccionamiento de datos en la memoria

El proceso a través del cual el procesador controla la ejecución de instrucciones se denomina fetch-decode-execute cycle o el execution cycle. Consta de tres pasos continuos:

  • Obtener la instrucción de la memoria
  • Decodificar o identificar la instrucción
  • Ejecutando la instrucción

El procesador puede acceder a uno o más bytes de memoria a la vez. Consideremos un número hexadecimal 0725H. Este número requerirá dos bytes de memoria. El byte de orden superior o el byte más significativo es 07 y el byte de orden inferior es 25.

El procesador almacena datos en una secuencia de bytes inversa, es decir, un byte de orden inferior se almacena en una dirección de memoria baja y un byte de orden superior en una dirección de memoria alta. Entonces, si el procesador trae el valor 0725H del registro a la memoria, transferirá primero 25 a la dirección de memoria inferior y 07 a la siguiente dirección de memoria.

x: dirección de memoria

Cuando el procesador obtiene los datos numéricos de la memoria para registrarlos, nuevamente invierte los bytes. Hay dos tipos de direcciones de memoria:

  • Dirección absoluta: una referencia directa de una ubicación específica.

  • Dirección de segmento (o desplazamiento): dirección de inicio de un segmento de memoria con el valor de desplazamiento.