Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eternal Idol

#3241
ASM / Re: Tamaño de word
17 Noviembre 2009, 08:10 AM
Un char (caracter) ocupa un byte unicamente, el tema esta en el alineamiento en memoria pero en x86 una palabra son 2 bytes, una doble palabra (DWORD) son 4 bytes.

Habria que ver que modificadores estas usando para el compilador, si yo genero ESE codigo con VC++ no hace nada al optimizarlo ...
#3242
ASM / Re: Pregunta acerca de S.Os
15 Noviembre 2009, 18:45 PM
Si, cualquier PC (incluidas las mas modernas) arranca en modo real.
#3243
ASM / Re: Puerto serie i Api CreateFile (MASM32)
12 Noviembre 2009, 22:24 PM
Usar la API de Windows en MASM es practicamente lo mismo que usarla con C/C++, aca tenes un tutorial:

http://www.codeproject.com/KB/system/SerialPortComm.aspx

Mas informacion en la MSDN:
Communications Resources.
Serial Communications in Win32
#3244
Cita de: MCKSys Argentina en 11 Noviembre 2009, 01:27 AM
El tema no es la pregunta, sinó el tipo de pregunta.

¿ Porqué no quieres usar EAX ?  :huh:

Eso no tiene lógica... Por eso las respuestas. ;D

Es que hay que leer el hilo completo no solo el titulo  ;)
#3245
De nadas  :)
#3246
Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en  9 Noviembre 2009, 22:20 PM
que diferencia hay entre usar un registro u otro?

Existen diferentes convenciones de llamada, esto lo escribi antes sobre la de usada por los servicios de Linux:

Cita de: Eternal Idol en  3 Noviembre 2009, 20:47 PMA 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.



Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en  9 Noviembre 2009, 22:20 PM
que diferencia hay entre usar un registro u otro? Vienen a ser como almacenes de memoria?

Si: registro.
#3247
Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en  9 Noviembre 2009, 22:04 PM
1- que significa que:
Código (asm) [Seleccionar]
int 0x80
Llama al kernel? Que es 0x80?

0x80 es el numero de interrupcion que sera llamada, es la elegida por Linux como interfaz para sus servicios  (los manejadores de interrupcion estan en modo Kernel).

Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en  9 Noviembre 2009, 22:04 PM
2- En el siguiente codigo:
se que el segundo subrallado calcula los bytes que ocupa la llamada al hola, pero como puedo especificar desde donde quiero contra bytes? Para que sirve en un hello world una lectura de este tipo si ni si quiera la expresamos en pantalla?
Que significa el primer subrallado?

Los cuenta desde esa posicion, justo despues del final de msg. ¿A que lectura te referis? Solo hay una escritura en pantalla ... eso pone en el registro edx el valor de len.

Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en  9 Noviembre 2009, 22:04 PM3-que son:
section   .text
_start:   
section   .data

Deduzco que deben ser clases o metodos del ensamblador, pero no lo concretizo.

No, son secciones del ejecutable, la sección de codigo y la de datos mas precisamente (ver ELF y PE por ejemplo).
#3248
ASM / Re: Duda sobre e
9 Noviembre 2009, 22:03 PM
De nadas  ::)
#3249
ASM / Re: Duda sobre e
8 Noviembre 2009, 23:34 PM
Si queres hacerlo por separado mira el codigo original: sys_write es la clave (en las 5 primeras lineas se hace la escritura). Lo que queres hacer es llamar a la funcion write para que escriba en la consola otra vez.
#3250
ASM / Re: Problema de novato
8 Noviembre 2009, 23:32 PM
Cita de: Eternal Idol en  3 Noviembre 2009, 20:47 PMA 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/write

Igual si lees los comentarios del codigo ahi te indica todo.