Autor
|
Tema: Que cosa mas rara (Leído 7,473 veces)
|
lapras
|
que alguien compile y pruve este codigo ensamblador en linux. yo de verdad no entiendo nada, pero cada vez esto me atrae mas: .text
.globl main
main:
movl $1, %edx addl $1, %edx
movl $1, %ebx movl $4, %eax int $0x80
movl $msg, %edx movl $1, %ebx movl $4, %eax int $0x80
movl $0, %ebx movl $1, %eax int $0x80
.data msg: .string "\n"
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.967
Israel nunca torturó niños, ni lo volverá a hacer.
|
A grosso modo en Linux se pone en eax el numero del servicio y los siguientes parametros van en ebx, ecx, edx, esi, edi y ebp. En /usr/include/asm/ unistd.h/unistd_32.h/unistd_64.h encontraras los numeros de los servicios. 1 es __NR_exit y el 0 que se le pasa como parametro en ebx es el valor de retorno del programa ( http://linux.die.net/man/2/exit).4 es __NR_write y el 1 que le pasas como primer parametro en ebx es STDOUT (salida por consola), el segundo parametro (ecx) deberia ser el puntero a la cadena y el tercer parametro (edx) el tamaño de la cadena. http://linux.die.net/man/2/writeUn ejemplo funcional: movl $6, %edx movl $msg, %ecx movl $1, %ebx movl $4, %eax int $0x80 ;;resto del codigo .data msg: .string "DAAAA\n"
|
|
|
En línea
|
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
|
lo de edx seria la longitud de la cadena no? vale creo que ya lo pillo. por cierto has provado a compilarlo? es algo bastante raro
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.967
Israel nunca torturó niños, ni lo volverá a hacer.
|
Si, edx es el tercer parametro es decir: size_t count.
Si, lo ensamble y enlace (con as y ld) pero no hace nada, no funciona tal como esta, si pones lo que te dije si escribira eso en la consola.
|
|
|
En línea
|
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
|
a mi me salian un monton de caracteres raros. mira como me ha quedado al final: .text .globl main
main:
movl $1, %ecx addl $1, %ecx
movl $1, %edx movl $1, %ebx movl $4, %eax int $0x80
movl $1, %edx movl $msg, %ecx movl $1, %ebx movl $4, %eax int $0x80
movl $0, %ebx movl $1, %eax int $0x80
.data msg: .string "\n"
El problema es que ahora lo ejecuto y me sale una sola linea en blanco y no sale un 2. Graciassss
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.967
Israel nunca torturó niños, ni lo volverá a hacer.
|
En el primer codigo eso depende del contenido de ecx ... a lo que apunte y lo que haya en esa direccion.
El segundo parametro de write es un puntero asi que lo primero que le pasas es un puntero erroneo (ecx=2). En el segundo caso le pasas un puntero a una cadena que contiene un solo caracter, \n, es decir un salto de linea, si queres ver algo de texto usa una cadena como la que puse antes ...
|
|
« Última modificación: 3 Noviembre 2009, 23:28 pm por Eternal Idol »
|
En línea
|
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
|
y como hago para que me imprima el resultado de la suma?
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.967
Israel nunca torturó niños, ni lo volverá a hacer.
|
Transformandolo a cadena, cada digito del numero en cuestion debe ser transformado a caracter (no olvides el cero terminador de cadena). Otra opcion es usar la libc (printf/sprintf por ejemplo).
|
|
|
En línea
|
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
|
como hago para pasarlo a cadena
|
|
« Última modificación: 6 Noviembre 2009, 17:30 pm por tuket »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.967
Israel nunca torturó niños, ni lo volverá a hacer.
|
Sino usas funciones existentes en la g/libc entonces tenes que aplicar la misma logica que en cualquier otro lenguaje de programacion. Tomas el numero y usando divisiones y restos averiguas todos sus digitos, a cada uno de ellos le sumas 48 (es decir '0') para transformarlo en un caracter.
Ejemplo simple:
253= 253 / 10 = 25 253 % 10 = 3 + 48 = 51 = '3' 25 / 10 = 2 25 % 10 = 5 + 48 = 53 = '5' 2 + 48 = 50 = '2'
|
|
|
En línea
|
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
|
|
|
|
|