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.