sintaxis intel y AT&T

Iniciado por lapras, 4 Septiembre 2009, 13:31 PM

0 Miembros y 1 Visitante están viendo este tema.

lapras

hola estoy empezando con el esamblador y me gustaria saber si con el compilador gcc es posible que al compilar codigo en C me genere el codigo ensamblador en sintaxis intel en vez de AT&T cuando uso la opcion -S. Tambien quisiera saber que diferencias hay entre las dos sintaxis y cual es mas recomendable aprender. Por cierto ¿es muy diferente el ensamblador de 32 bits y el de 64?

gracias de antemano

karmany

La sintaxis intel o la AT&T dependen normalmente del compilador que uses y de las opciones que ellos tengan.

Algunos depuradores te permiten elegir una u otra.

La sintaxis intel es utilizada por ejemplo por Microsoft y normalmente es relacionada con Windows. La sintaxis AT&T es relacionada con Linux. Cada persona tiene su opinión al respecto, pero para mí tienen bastantes diferencias...de AT&T conozco bastante poco.

Mira acabo de echar un vistazo a un libro que tengo de programación en asm y estoy viendo que con gcc es posible usar la sintaxis intel. No tengo ni idea de cómo se debe configurar pero la sintaxis que estoy leyendo está en intel.

Respecto al ensamblador de 32 y de 64 bits pues tienen sus diferencias, sólo piensa que los registros tienen un tamaño doble. Piensa también que si programas en 32 bits, tu programa servirá también para ordenadores a 64 pero no al contrario.

lapras

#2
En primer lugar gracias por responder :D
He esta viendo por ahi y he visto que la sintaxis intel se usa muchisimo mas, pero me da que tanpoco son tan diferentes.
en el gnu as puedes poner .intel_syntax para activar la sintaxis intel y .att_syntax para cuando quieres volver a la de por defecto, pero mi pregunta era : con el conpilador de c gcc si escribes -S en vez de dar un ejecutable da un fichero equivalente en ensamblador y me parecia util para aprender ensamblador por que ya domino C mas o menos, pero el problema es que al hacer esto el fichero que te da esta en syntaxis AT&T y los libros que tengo no dicen nada de AT&T y queria saber si hay alguna manera de que te de el fichero en sintaxis intel.

En cuanto a lo de 32 bits y 64 yo creia que los libros que compre tratarian mas los nuevos procesadores y dan un poco de 32 bits y gracias por que es casi todo de 16 bits a pesar de ser tan actuales: (Es que yo uso AMD Athlon 64 x2¿cuando hay mas CPUs hay mas registros? voy mas perdido...)
             

He encontado esto y creo que es sintaxis AT&T de 64 bits ¿es posible que AMD este mas relacionado con esta?

Erik#

Ya hay unos registros preseleccionados para 8 bits, 16 bits, 32 bits, 64 bits y powerpc (creo)

lapras

#4
Si parece que para los de 16 no tiene prefijo, los de 32 tienen prefijo e y los de 64 tienen el prefijo rex.
ej:

16 -> ax
32 -> eax
64 -> rax

Mira en mi libro pone que un registro RAX puede estar dividido en 2 registros EAX y a su vez cada uno de estos estar dividido en AX y cada AX estar dividido en AH y AL, que cosas.
Ya voy pillando esto un poco, pero esta xungooo :¬¬

lapras

Por cierto cuando hay 2 CPUs hay el doble de registros? como se accede al segundo procesador ?
gracias

Erik#

Creo que es imposible, porque tu trabajas con 1 PC no con dos a la vez con una misma pantalla :S

Karcrack


Eternal Idol

SetProcessAffinityMask y SetThreadAffinityMask son funciones de la API de Windows, esto nos demuestra que el scheduler del S.O. es el que se encarga de encauzar la ejecucion de un hilo en un procesador determinado. Ademas el S.O. tiene que inicializar cualquier otro procesador que no sea el principal ... es un tema muy complejo y ligado a la arquitectura del hardware (APIC).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

lapras

Gracias por contestar a todos  ;D

CitarSetProcessAffinityMask y SetThreadAffinityMask son funciones de la API de Windows, esto nos demuestra que el scheduler del S.O. es el que se encarga de encauzar la ejecucion de un hilo en un procesador determinado. Ademas el S.O. tiene que inicializar cualquier otro procesador que no sea el principal ... es un tema muy complejo y ligado a la arquitectura del hardware (APIC).

quieres decir que el propio SO ya usa automaticamente el 2º CPU cuando le da la gana? cada CPU tiene su APIC o es comun? Perdon que haga tantas preguntaas pero es que realmente este tema me interesa mucho y me gustaria aprender por muy complejo que sea ;)