Asm Gcc Linea

Páginas: 21 (5089 palabras) Publicado: 30 de julio de 2015
APÉNDICE 2
ENSAMBLADOR EN LÍNEA CON EL gcc
1. Herramientas
Los programas se desarrollarán en C y en ensamblador. El ensamblador se utilizará
básicamente para realizar ciertas optimizaciones en el código C (dentro del programa en
C, “in line”). Las prácticas se realizarán con software de dominio público, en concreto
con el compilador gcc bajo el sistema Linux, o bien con el paquete djgpp queimplementa gcc en DOS e incluye además el entorno de desarrollo rhide para DOS.
Este paquete se puede encontrar en http://www.delorie.com/djgpp.

2. Ensamblador de GNU
El compilador gcc (y el djgpp) utiliza para el ensamblador la sintaxis de AT&T (GAS =
Gnu ASsembler). Ésta tiene pequeñas diferencias con respecto a la sintaxis estándar de
Intel (usada en TASM, MASM, etc). Las principales diferencias sedetallan en la
siguiente tabla (ver el apéndice 1 para más detalle):
AT&T (Motorola)

DIFERENCIAS

Intel

1.

En AT&T, a los nombres de los registros se les añade el prefijo
%eax
%.

eax

2.

En AT&T, el destino se coloca a la derecha y el fuente a la
movl %eax, %ebx
izquierda (en Intel es al contrario).

mov ebx, eax

3.

En AT&T, a los valores inmediatos se les añade el prefijo $.

4.

En AT&T,el tamaño del resultado se especifica con sufijos (b, w movb var, %ah
o l) en las instrucciones (en Intel cuando hay ambigüedad se movw %bx, %ax
utiliza byte ptr, word ptr o dword ptr).
movl %ebx, %eax

5.

6.

7.

movl $var, %eax
movl $0xf02, %ebx

mov eax, offset var
mov ebx, 0f02h
mov ah, byte ptr var
mov ax, bx
mov eax, ebx

desplazamiento(base,indice,escala)[base+indice*escala+desplazamiento]

movl array (, %eax, 4), %edx

mov edx, array[eax*4]

movl (%ebx), %eax

mov eax , [ebx]

movl 3(%ebx), %eax

mov eax , [ebx+3]

Salto lejano.

lcall $sección, $offset
ljmp $sección, $offset
lret $V

call far sección:offset
jmp far sección:offset
ret far V

Varían los nemotécnicos de algunas instrucciones.

movswl %ax, %ecx
movzbw %ah, %cx
cbtw
cwtl
cwtd
cltd

movsx ecx, ax
movzx cx, ah
cbwcwde
cwd
cdq

Direccionamiento a memoria.

En la página web del DJGPP podemos encontrar una guía detallada sobre la sintaxis
AT&T, y ejemplos de ensamblador en línea:
http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html
2.1. Ensamblador en línea en gcc
A continuación detallaremos la sintaxis utilizada para insertar código ensamblador en
un programa en C. Para más información sobrela sintaxis utilizada por GAS se

2

Ensamblador en línea

recomienda estudiar la página de manual (man as o bien info as) o visitar los enlaces
que se proponen al final del guión.
2.1.1. Ensamblador en línea básico
El formato básico para incluir instrucciones ensamblador es simple, y similar al
utilizado por Borland:
asm ( “sentencias” )

Ejemplos:
• ejecutar la instrucción NOP
asm (“nop”)

•deshabilitar interrupciones:
asm (“cli”)



y definiendo como una macro:
#define disable() asm volatile (“cli”)

Se puede utilizar __asm__ en lugar de asm si esta palabra reservada entra en conflicto
con algún identificador del programa C.
Veamos cómo incluir varias líneas de ensamblador en un programa C:
__asm__ (“movl %eax, %ebx \n\t”
“movl $56, %esi \n\t”
“movl %ecx, $label(%edx , %ebx, $4)\n\t”
“movl %ah, (%ebx)”;

Cada línea va encerrada entre comillas dobles ( “ “ ); el retorno de carro y el tabulador (
\n\t ) al final de cada línea se debe a que gcc pasa esas líneas tal cual a GAS, que espera
una instrucción ensamblador por línea, y además identada un tabulador.
2.1.2. Ensamblador en línea extendido
En el último ejemplo hemos hecho uso de los registros sin tener en cuenta si eninstrucciones previas gcc tenía almacenado algún valor. Puesto que no queremos
interferir con gcc en la asignación de registros a variables del programa C, en el bloque
de instrucciones ensamblador deberemos indicar a qué variables queremos acceder y si
es para lectura o escritura, en qué registros queremos guardarlas (y que gcc tenga esto
en cuenta para preservar valores que pudieran perderse),...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • CICLO ASM
  • Compiladores Gcc
  • Normas asm
  • asm,db
  • Dj Gcc
  • Pics Asm
  • Carta ASM
  • cartas asm

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS