Ensamblador - PREGUNTAS A ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS

 
Vista:
Imágen de perfil de Luis

PREGUNTAS A ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS

Publicado por Luis (8 intervenciones) el 24/01/2014 15:48:47
Acabo de empezar a aprender lenguaje ensamblador con S.O: UBUNTU 12.10, ARQUITECTURA: IA-32, ENSAMBLADOR: GAS y COMPILADOR: GCC(BINUTILS).
Como con estas caracteristicas hay muy pocos tutoriales desde cero, de ensamblador y yo empece ayer a dar mis primeros pasos con Learnassembler.com y otros libros de apoyo; animo a todo aquel que tenga preguntas o pueda aportar informacion de nivel cero. Para preservar el caracter conciso de la mencionada plataforma, abstenerse las que sean diferentes:
Aqui abro pues este hilo con mis primeras preguntas:
1ª. ¿es posible declarar los tamaños de los diferentes tipos de datos en Python, en vez de en C? (http://learnassembler.com/IA32esp.html).
2ª.¿que significa: "el byte menos significativo se ubique en la posición de menor orden y el byte más significativo en la posición de memoria de mayor orden.". ¿cual es el byte mas significativo y cual menos?¿y la posicion de memoria de mayor orden?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

PREGUNTAS A ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS

Publicado por Pico (50 intervenciones) el 29/01/2014 08:56:00
1ª - ?

2ª - Significa que si el número 0x11223344 está en la posición de memoria 100, en la 100 estará el byte 44, en la 101 el 33, en la 102 el 22 y en la 103 el 11, dado que el byte más significativo es el 11, el menos el 44 y la posición de memoria de menor orden es la 100, la de mayor orden la 103. El byte menos significativo es el de la derecha; el más, el de la izquierda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Luis

PREGUNTAS A ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS

Publicado por Luis (8 intervenciones) el 29/01/2014 11:23:09
Hola Pico, gracias por responder a mis preguntas. Te comento:
Acabo de empezar a aprender desde completamente CERO el lenguaje ensamblador. Por lo que solamente para saber la plataforma que necesitaba me costo muchisimo establecerme.
Voy dando palos de ciego porque aunque hayan bastantes tutoriales sobre este lenguaje, todos los conceptos son conceptos completamente nuevos para mi y me cuesta mucho entender COMO FUNCIONA este lenguaje, hasta llegar a veces a la frustracion(no como en Python que ya entendia la idea y todos los conceptos a base de poder ver su funcionamiento.
Por eso, estas dos preguntas estaban relacionadas con la web learnassembler, de las cuales, la primera tampco entendi porque en una de sus tablas ponia las declaraciones equivalentes en C. Y la segunda, porque no recordaba bien en el sistema binario el tema de el byte mas significativo y el que menos, ya que me centre por completo en Python.
Sigo estudiando libros muy basicos sobre Ensamblador, pero te agradeceria que si pudieras guiarme sobre que conceptos me pueden ayudar a entender como funciona este lenguaje, su estructura, etc te lo agradeceria. No avanzo apenas en la comprension de este lenguaje.
Nuevamente, muchas gracias Pico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Luis

PREGUNTAS A ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS

Publicado por Luis (8 intervenciones) el 12/02/2014 18:39:40
Buenas a toda la sección. Dejo este codigo asm con plataforma Intel/Linux/Gas/32bits para poder localizar los errores que haya podido cometer, ya que es MI PRIMER MINI CODIGO ya que parto totalmente de cero:
#abro consola linux e invoco ensamblador con código "as"
$ as
#sigo con el código
.section .data. #inicializo la variable "mensaje"
message db .ASCII "esta es una linea de texto , 0dh ,0ah y esta es otra" , 0
#cerrando codigo
movl $1, %eax
movl$0, %ebx
int$0×80
Doy gracias de antemano a todo aquel que pueda ayudarme a este magnifico pero confuso lenguaje
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

PREGUNTAS A ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS

Publicado por Pico (50 intervenciones) el 12/02/2014 19:05:21
Sí, con el ensamblador hay que tener mucha paciencia y no desesperarse. Cuesta mucho hasta entender sus maneras; está muy lejos del lenguaje nuestro y muy cerca del de la máquina, por eso cuesta. Pero un vez pillado no resulta muy complicado. Paciencia y empeño. Lenguajes como phyton, pascal, o incluso c están muy cerca de nuestro lenguaje habitual y se pillan fácilmente.

Los datos de c son muy parecidos a los del ensamblador, o son los más parecidos de los lenguajes de alto nivel. El c es el lenguaje de alto nivel que está más cerca del ensamblador.

El código que has puesto parece que está bien. Parece una llamada al syscall que saca una cadena por la pantalla, pero es una sintaxis asm que nunca he usado y tampoco conozco las syscall de linux.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Luis

PREGUNTAS A ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS

Publicado por Luis (8 intervenciones) el 12/02/2014 19:57:35
Gracias Pico. Dentro de asm linux esta la sintaxis A&T y la de Intel IA-32. La primera es la propia del ensamblador AS y la segunda es la propia de NASM. Pero encontré un tutoriale muy bueno que usa GAS con IA-32, otra de las cosas que me siguen sorprendiendo. Pero por muy buenonque sea el Tito me salen cientos de dudas, ya que es muy confuso todo. Como por ejemplo: que sentido tienen los registros y de que manera se manipulan? Y para que quiero pasar unos datos de un registro a otro?. Esto en Python no sucede ya que es todo mas explicito. Pero reconozco que ensamblador es importantísimo en programación, la base sobre la cual puedes enriquecer con un lenguaje de muy alto nivel como Python. Y solo por eso lo estoy aprendiendo. PERO CIERTO QUE ENCONTRARLE LA LOGICA AL FUNCIONAMIENTO DE ENSAMBLADOR ES PURAMENTE MASOQUISTA.
Gracias Pico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

PREGUNTAS A ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS

Publicado por Pico (50 intervenciones) el 12/02/2014 21:00:43
Los registros de un procesador es memoria, como la ram. Los necesita porque para hacer muchas cosas tiene que hacerlo a través de ellos, no puede estar trabajando siempre directamente sobre la ram. Ahora lo hacen eso algo más, antes mucho menos.

Para ver para qué sirven y cómo se usa lo mejor es ver cómo queda un programa en c compilado. Por ejemplo:

char b[5];
for (int i=0;i<5;i++) b[i]=i;

Eso queda en ensamblador tal que (sintaxis intel, y poco optimizado):

0041192F mov dword ptr [i],0 ; poner i a 0 (i=0)
00411936 jmp main+61h (411941h) ; saltar a comprobar si i es menor que 5 a la dirección 00411941 (i<5)
00411938 mov eax,dword ptr [i] ; pone en eax el valor de i
0041193B add eax,1 ; incrementa (i++)
0041193E mov dword ptr [i],eax ; pone en i el nuevo valor de eax
00411941 cmp dword ptr [i],5 ; compara i con 5 (i<5)
00411945 jge main+73h (411953h) ; salta fuera del bucle si no es menor que 5
00411947 mov eax,dword ptr [i] ; pone en eax el desplazamiento i en la tabla b
0041194A mov cl,byte ptr [i] ; pone en cl el char i
0041194D mov byte ptr [ebp+eax-38h],cl ; pone en la tabla b, posición i, el valor de i (b[i]=i)
00411951 jmp main+58h (411938h) ; continúa con el for (salta a 00411938)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Luis

PREGUNTAS A ENSAMBLADOR LINUX/IA-32/GAS/BINUTILS

Publicado por Luis (8 intervenciones) el 13/02/2014 11:58:06
Gracias Pico por compartir tus conocimientos conmigo, pero creo que no te llego ni a la suela de los zapatos. Para empezar, yo jamas he tocado lenuaje C, me decline por Python porque lo vi mas potente y mucho mas facil y practico a la hora de estudiarlo. Y lo malo es que no puedo compilar scripts de Python ya que no es un lenguaje compilado.
De todas maneras, dentro de mi humilde y bajo nivel en este campo, todos los conocimientos que vaya adquiriendo acerca de la sintaxis de Ensamblador de Linux, te ire comentando.
Para empezar algo que se pero que me tiene desconcertado por completo, por si te interesa:
La sintaxis AT&T tenia entendido que era la utilizada por GAS y la IA-32 de Intel para el ensamblador NASM.......PERO RESULTA QUE ESTOY SIGUIENDO UN CURSO QUE RESULTA QUE UTILIZA LA SINTAXIS IA-32 CON EL ENSAMBLADOR GAS....¿TU LO COMPRENDES? PORQUE YO NO....ALGO NO ME CUADRA.
Te dejo la direccion haber que te parece a ti: www.ciens.ucv.ve.8080/.../Tema_3.ppt PROGRAMACION EN ENSAMBLADOR.
Entra cuando quieras curiosear. Si es cierto que esta muy ben explicado en diapositivas, pero no me cuadra lo que te comento.
Saludos Pico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar