PROGRAMACIÓN DE MICROPROCESADORES
Es bien conocido que los actuales sistemas operativos son programados en su mayor parte en lenguajes de alto nivel, especialmente C, pero siempre hay una parte en la que el ensamblador se hace casi insustituible bajo DOS y es la programación de los drivers para los controladores de dispositivos, relacionados con las tareas de más bajo nivel de una máquina, fundamentalmente las operaciones de entrada/salida en las que es preciso actuar directamente sobre los demás chips que acompañan al microprocesador. Por ello y porque las instrucciones del lenguaje ensamblador están íntimamente ligadas a la máquina, vamos a realizar primero un somero repaso a la arquitectura interna de un microordenador.
8 bits
En arquitectura de computadoras, 8 bits es un adjetivo usado para describir enteros, direcciones de memoria u otras unidades de datos que comprenden hasta 8 bits (1 octeto) de ancho, o para referirse a una arquitectura de CPU y ALU basadas en registros, bus de direcciones o bus de datos de ese ancho.
Las CPU de 8 bits normalmente usan un bus de datos de 8 bits y un bus de direcciones de 16 bits lo que causa que su memoria direccionable esté limitada a 64 kilobytes; sin embargo esto no es una "ley natural", ya que existen excepciones.
16 Bit
En arquitectura de computadoras, 16 bits es un adjetivo usado para describir enteros, direcciones de memoria u otras unidades de datos que comprenden hasta 16 bits (2 octetos) de ancho, o para referirse a una arquitectura de CPU y ALU basadas en registros, bus de direcciones o bus de datos de ese ancho.
Al igual que en las videoconsolas, se denominan 16 bits a una serie de ordenadores que tenían en común usar procesadores de 16 bits.
32 y 64 bits
Cuando buscamos información sobre arquitecturas de 32 y 64 bits de Intel y AMD podemos terminar realmente mareados y confusos entre tantos términos que, en principio, parecen iguales pero en el fondo no lo son, o que nos llevan a pensar una cosa totalmente errónea
El salto a los 64 bits se produjo con la aparición de una nueva extensión en el año 2000 derivada de IA-32 llamada x86-64, desarrollada por AMD y posteriormente renombrada a AMD64 (el primer procesador con soporte para este conjunto de instrucciones fue el Opteron).
Más tarde, en el 2004, esta arquitectura extendida fue adoptada por Intel, el nuevo conjunto de instrucciones recibió el acrónimo EM64T (Extended Memory 64 Technology), cuyo nombre código fue Yamhill o IA-32e, y posteriormente fue renombrado adoptando el nombre definitivo de Intel 64 (arquitectura utilizada por primera vez a principios del 2005 con el Pentium 4).
A estas arquitecturas de 64 bits se las conoce de manera genérica como x86-64 o x64, y no debemos confundirlas con la arquitectura IA-64 de 64-bits.
Muchas arquitecturas de procesador de 64 bits pueden ejecutar nativamente código de la versión de 32 bits de la arquitectura sin ninguna penalización en el rendimiento. Este tipo de soporte se conoce frecuentemente como soporte bi-arquitectura o más generalmente como soporte multi-arquitectura.
Lenguaje Ensamblador
El lenguaje ensamblador, o assembler , es un lenguaje de programación de bajo nivel. Consiste en un conjunto de mnemónicos que representan instrucciones básicas para los computadores, microprocesadores, microcontroladores y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura de procesador y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Cada arquitectura de procesador tiene su propio lenguaje ensamblador que usualmente es definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento, los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portables.
Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina.
Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y se llaman macro ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, alto rendimiento, o un uso de recursos controlado y reducido. También es utilizado en el desarrollo de controladores de dispositivo (en inglés, device drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del acceso directo a las instrucciones de la máquina. Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la única manera de ser manipulados.
No hay comentarios.:
Publicar un comentario