¿Por qué no es portable AT&T?

Iniciado por GeorgArming, 4 Diciembre 2011, 01:27 AM

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

GeorgArming

La sintaxis del ASM inline AT&T... por qué no es portable? No es de ningún procesador en concreto... o sí?

PD: perdón por el bombardeo de preguntas pero son temas diferentes

farresito

#1
No te acabo de enternder con lo de 'es portable' o no. Actualmente hay 2 sytaxis, la intel y la att. la intel es la mas usada. la att es famosa por el hecho que es la predeterminada en el gcc (compilador gnu linux) y como gcc fue desarrollada en laboratorios att le pusieron este nombre. si te aprendes una syntaxis te va a ser facil moverte a la otra.

syntaxis != a procesador. la syntaxis es solo la representacion de los opcodes (que es a la vez el del binario). lo unico que con la syntaxis att solo puedes usarla para ensamblar con gas (gcc) mientras que con la intel, en el resto. los opcodes seran los mismos (por ej 02 F0. cuando creas un ensamblador tienes que decidir con que 'palabra humana' representas el opcode (binario). unos usaran ADD, otros $ADD, lo que quieras, pero siempre que ensambles el programa, ADD o $ADD convertiran a 02 F0. o podrias usar SUMAR, pero seguiria convirtiendose en ese opcode.

un abrazo

PD: Por cierto, los opcodes es la representacion del binario. y a la vez nosotros representamos los opcodes con palabras mas humanas. cuando ensamblas, la palabra humana se convierte en OPCODE, que a la vez se convierte en binario. por eso da igual la syntaxis. siempre se va a convertir en el mismo opcode

GeorgArming

bueno, más o menos te entiendo. yo me refería a que, por ejemplo, si programas en sintaxis Intel para ASM x86, sólo es aplicable a x86. Pero AT&T, en qué procesadores se puede ejecutar?

farresito

Sí, la syntaxis Intel es generalmente para x86. La AT&T tambien es generalmente para x86. Esta syntaxis se usa para correr programas sobre procesadores x86. Si quieres correr un programa en ARM tienes que hacer otra vez el codigo y adaptar la syntaxis a aquel procesador y a los registros, ya que cambian. Por ejemplo, para ARM la syntaxis se parece a ambas pero no es igual, es ligeramente diferente. Para Atmel (otra arquitectura) tambien cambia (te estoy hablando en ambos casos de GAS, el ensamblador por defecto de GNU GCC). Es lo que te digo, la syntaxis es solo un modo de representar el binario para que lo entendamos. El creador de cada ensamblador decide como lo representa. Yo puedo programar un ensamblador para ARM con syntaxis Intel (de hecho, los hay, pero se suele usar el de GNU GCC (GAS)). Si al fin y al cabo la syntaxis Intel y la AT&T llegan al mismo punto, únicamente que por caminos distintos. Unos quieren ir por encima del puente y otros por debajo pero llegan al mismo sitio.

En resumen, tu pregunta: Syntaxis Intel es para x86. Syntaxis AT&T tambien es para x86. Otras syntaxis, generalmente, otras arquitecturas, dependiendo del fabricante. Como GCC es opensource, son los fabricantes son los que pagan sus trabajadores para que desarrollen y implementen lo que quieren en GCC (un ensamblador para su arquitectura. Así se acercan al publico con herramientas gratuitas).

Un abrazo. Cualquier duda, postéala.

PD: No soy demasiado bueno explicando. Sorry :(

GeorgArming

no estoy de acuerdo, eres bueno explicando. ya entendí. gracias