Tema 3. Programación en Lenguaje Ensamblador

Download Report

Transcript Tema 3. Programación en Lenguaje Ensamblador

Organización y Estructura
del Computador 1
Tema 3
Programación en Lenguaje Ensamblador
Programación en Lenguaje
Ensamblador
Este material se refiere al compilador gcc (GNU
compiler collection) el cual corre bajo ambiente
Linux. El ensamblador de gcc se llama as y por
formar parte de gcc comúnmente se conoce como gas.
Programación en Lenguaje
Ensamblador
Plataforma: IA-32
IA-32 es la arquitectura de microprocesadores de 32 bits de Intel (Intel
Architecture 32). Son los microprocesadores más usados en los ordenadores
personales (PC).
Esta gama de microprocesadores comenzó con el Intel 80386 en 1985,
conocido luego popularmente como 386 o x86 para denominar a toda la
gama. Los procesadores de Intel que siguieron y mantuvieron la
compatibilidad son el 486, Pentium, Pentium II, Pentium III, Pentium 4, y
la línea Intel Core.
La novedad de estos procesadores con respecto a sus predecesores es que
incluyen gestión de memoria avanzada (segmentación, paginación, soporte
de memoria virtual), unidad de punto flotante, y a partir del Pentium MMX,
soporte para operaciones matriciales complejas, muy usadas en aplicaciones
gráficas y multimedia.
Plataforma: IA-32
Tipos de datos
La información se puede accesar de diversas maneras. Se puede leer
un sólo byte (8 bits) o un conjunto de bytes, en esta máquina en
particular se denomina palabra a dos bytes y doble palabra a 4 bytes.
La notación puede ser en decimal o en hexadecimal.
Plataforma: IA-32
Tamaños de los datos:
Plataforma: IA-32
Orden de los datos en memoria:
En gas las instrucciones utilizan un sufijo para indicar el tamaño de
los datos sobre los cuales operan.
El sistema guarda los datos en memoria en secuencia inversa de
bytes (little endian) lo cual trae como consecuencia que el byte
menos significativo se ubica en la posición de menor orden y el byte
más significativo en la posición de memoria de mayor orden. Por
ejemplo si se transfiere el dato 0x457A a las posiciones consecutivas
de memoria 0x100 y 0x101 se ubica el byte 7A en la posición 0x100
y el byte 45 en la posición 0x101.
Plataforma: IA-32
Registros de propósito general
Los registros de propósito general se utilizan para almacenar datos
temporalmente, debido a que estos registros han evolucionado desde
una máquina de 8 bits (el 8080) un grupo de registros aún se puede
acceder de 8 bits para mantener compatibilidad con toda la línea de
procesadores.
Aún cuando estos registros pueden mantener cualquier tipo de datos,
algunos tienen cierta funcionalidad específica o son usados de
manera especial por algunas instrucciones.
Plataforma: IA-32
Registros de propósito general
Plataforma: IA-32
Registros de propósito general
En gas los registros se denotan usando el símbolo de porcentaje
antes del nombre del registro. Los registros %eax, %ebx, %ecx y
%edx pueden ser accesados con tamaños de 8, 16 o 32 bits
cambiando su nomenclatura de acuerdo al tamaño.
Ejemplo para %eax:
Plataforma: IA-32
Registros de propósito general
Los registros %edi, %esi, %ebp y %esp se pueden accesar
como registros de 16 o 32 bits.
Ejemplo para %edi:
Plataforma: IA-32
Registro de instrucción: El registro de instrucción o contador
de programa contiene la dirección de la próxima instrucción a
ejecutarse.
Registros de punto flotante:
Son 8 registros los cuales son
tratados como una pila. Se nombran %st(0), %st(1), %st(2), etc.
%st(0) se ubica en el tope de la pila.
Banderas:
Proveen una manera de obtener información acerca
del estado actual de la máquina y el resultado de procesamiento de
una instrucción. La plataforma IA-32 utiliza un registro de 32 bits
llamado EFLAGS que contiene las banderas.
Plataforma: IA-32
Banderas:
Estas son las banderas más comunes: