Lenguaje ensamblador: Introducción, características y ejemplos

Clasificado en Informática

Escrito el en español con un tamaño de 3,41 KB

Tema 33. Lenguaje ensamblador

1. Introducción

Hablar de los temas de programación. Los programadores manejan la Máquina Virtual, interrupciones, hardware y caché. Es importante ser claro y conciso en los lenguajes de bajo nivel. Cada PC tiene un lenguaje ensamblador distinto. En este documento se hablará de la arquitectura x86.

2. Lenguaje ensamblador

Siguen la arquitectura de Von Neumann. A cada instrucción máquina se le asigna un mnemotécnico. Por ejemplo: x=y; mov ax,x, mov y, ax (Intel 86), move x,D0 move D0,y (Motorola 68000). ETIQUETA INSTRUCCIÓN OPERANDOS COMENTARIO.

2.1 Ventajas e inconvenientes

Es mejor que el código máquina en términos de flexibilidad (todo puede codificarse en ensamblador, lo mantiene vivo para sistemas empotrados, núcleos de sistemas operativos y dispositivos móviles). Sin embargo, puede resultar tedioso y complicado, no es portable, tiene poca granularidad y poca redundancia (pocas cosas puede comprobar el ensamblador para asegurarse de que se están haciendo las cosas bien).

3. Características

Se hablará de los lenguajes ensambladores en relación a sus arquitecturas.

3.1 Conjunto de instrucciones

CISC (Complex Instruction Set Computer), RISC (Reduced Instruction Set Computer). Por ejemplo: mov ax,[1234h + BX + 2*DI], en RISC requiere 4 instrucciones más.

3.2 Número de operandos por instrucción

4 parámetros (más teórico que práctico), 3 (dos operandos y dónde se almacena), 2 (uno de los operandos se sobrescribe), 1 (opera sobre una pila).

3.3 Modos de direccionamiento

3.3.a Direccionamiento para el código (absoluto: la instrucción contiene la dirección a la que se salta, relativo al programa: un valor que incrementa el contador, indirecto a registro: almacenada en un registro).

3.3.b Direccionamiento para los datos: Inmediato (en la instrucción), directo (el registro tiene el dato, o la instrucción contiene la posición absoluta del dato). Indirecto: el dato está en memoria y hay que calcularlo (mediante registro, relativo a un registro base (registro + cte(offset))). Indexado absoluto (dirección de comienzo de un vector), indexado relativo a (base, desplazamiento).

3.4 Ortogonalidad

Indica si todos los modos de direccionamiento están accesibles para todos los tipos de instrucciones y todos los registros. RISC es más ortogonal.

4. Ejemplo de Lenguaje Ensamblador

Intel 80x86, empezó en 1978-79. Se mantiene la compatibilidad hacia atrás.

4.1 Arquitectura

8086 (arquitectura de 16, 32 y 64 bits). Realiza operaciones aritméticas y lógicas.

4.2 Registros Generales

(AX, BX, CX, DX) (AH, BH parte alta) (AL, BL baja) (ExtendedAX) (386) Registros de segmento. Un registro almacena el segmento y el otro el desplazamiento. Registros base (SI (Source Index), DI (Destination Index)). Stack Pointer (SP), Instruction Pointer (IP).

4.3 Instrucciones básicas

add ax, bx (suma y guarda en bx), mov destino, origen, and ax, bx, cmp ax, b.

4.4 Direccionamiento en INTEL

Inmediato (mov ah, 03h), directo absoluto (mov ax, [0017h]), indirecto a registro (mov sx, [bx]).

5. Conclusiones

El trabajo con lenguaje ensamblador es escaso, se utiliza en algunos sistemas embebidos y en ciertos dispositivos de hardware, pero proporciona otro nivel de visión.

Entradas relacionadas: