pruebas

Páginas: 29 (7051 palabras) Publicado: 23 de octubre de 2013
APÉNDICE 1
ENSAMBLADOR EN ENTORNOS LINUX / UNIX
1. Herramientas
Para desarrollar programas ensamblador en Linux, deberemos elegir el compilador de
ensamblador que queremos utilizar. La elección lógica es usar GAS (as), el estándar que
lleva toda distribución Linux.
GAS tiene la desventaja de utilizar la sintaxis AT&T, que difiere bastante de la sintaxis
Intel (la que conocemos delensamblador bajo MSDOS).
Una alternativa es utilizar NASM, que ofrece la misma funcionalidad que GAS, pero
utiliza la sintaxis de Intel.
Sin embargo, puesto que gcc utiliza as como ensamblador, para realizar la práctica de
optimización de código con ensamblador en línea debemos dominar la sintaxis AT&T.
Así pues, los programas que hagamos en esta parte de la práctica los desarrollaremos
utilizandolas herramientas NASM y GAS.

2. Programar con sintaxis Intel. NASM.
En NASM, un programa ensamblador aparece dividido en tres secciones (datos
constantes, variables e instrucciones de programa).
Veamos el ejemplo “Hola mundo” programado para NASM:
section .data
mensaje
longitud

db “hola mundo”,0xA
equ $ - mensaje

section .text
global _inicio
_inicio:
mov edx,longitud
movecx,mensaje
mov ebx,1
mov eax,4
int 0x80
mov ebx,0
mov eax,1
int 0x80

;definimos el punto de entrada
;EDX=long. de la cadena
;ECX=cadena a imprimir
;EBX=manejador de fichero (STDOUT)
;EAX=función sys_write() del kernel
;interrupc. 80 (llamada al kernel)
;EBX=código de salida al SO
;EAX=función sys_exit() del kernel
;interrupc. 80 (llamada al kernel)

El fichero lo debemos guardarcon extensión .asm (hola.asm). La compilación se lleva a
cabo mediante las siguientes órdenes de shell:
nasm –f
hola.asm
ld
–s –o hola
hola.o

lo que nos genera el ejecutable hola que nos mostrará el mensaje definido.

Ensamblador en entornos Linux / Unix

2

Descripción detallada del programa “Hola mundo” (NASM).
En la sección .data definiremos constantes (datos que nomodificaremos durante la
ejecución del programa). Aquí podemos incluir mensajes o tamaños de buffers. Las
directivas utilizadas para definir los tipos de datos (DB, DD, etc) son las mismas y se
usan del mismo modo que en el ensamblador de Intel bajo MSDOS.
section .data
mensaje
longitud

db “hola mundo”,0xA
equ $ - mensaje

En este caso, la definición de la cadena de texto es idéntica a la formaen que se hacía en
MSDOS (salvo que no hay que terminarla con el carácter $). Por otro lado, la función
del sistema que escribe una cadena de texto, necesita la longitud exacta de la cadena a
escribir (ya que no hemos hecho uso de un carácter de final de cadena). En este caso,
longitud es una constante que almacena el número de bytes (caracteres) desde el
comienzo de mensaje hasta ladefinición de longitud (el final de mensaje).
En la sección .bss definiremos las variables del programa. Aunque no lo hemos definido
en el ejemplo anterior, suele contener entradas como las siguientes:
fichero:
caracter:
palabra:
numero:
num_real:
precision:

resb
resb
resw
resd
resq
rest

256
1
1
1
1
1

;REServa
;REServa
;REServa
;REServa
;REServa
;REServa

256 Bytes
1Byte (8 bits)
1 Word (palabra, 16 bits)
1 DoubleWord (doble palabra, 32bits)
1 float de doble precision (64 bits)
1 float de precision extendida (128 bits)

El acceso desde el programa a estas variables se realiza de la forma que ya conocemos.
Por último, la sección .text es donde escribimos el código ensamblador, de la misma
forma que hacíamos en MSDOS. La sintaxis y el acceso a losregistros es igual, sin
embargo encontraremos algunas diferencias en cuanto a las llamadas al sistema (int 21h
en MSDOS) o el acceso a los parámetros de la línea de comandos, etc.
El comienzo del programa se indica mediante la directiva global _start al principio de la
sección .text . Es la forma que tenemos para indicarle al kernel cuál es la primera
instrucción a ejecutar en nuestro programa....
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Prueba
  • Prueba
  • Prueba
  • Prueba
  • Prueba
  • Pruebas
  • Pruebas
  • Prueba

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS