Dudas varias, simples pero grandes para un noob como yo ^^

Iniciado por Debci, 9 Noviembre 2009, 22:04 PM

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

Debci

Hola amigos, me ha gustado ensamblador, y quiero aprender mas, en concreto son las siguientes dudas:

1- que significa que:
Código (asm) [Seleccionar]
int 0x80
Llama al kernel? Que es 0x80?
2- En el siguiente codigo:
Código (asm) [Seleccionar]

section .text
    global _start ;must be declared for linker (ld)

_start: ;tell linker entry point

[s]mov edx,len ;message length[/s]
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel

mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel

section .data

msg db 'Hello, world!',0xa ;our dear string
[s]len equ $ - msg ;length of our dear string[/s]

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?

3-que son:
section   .text
_start:   
section   .data

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

Muchas gracias a todos, me estais haciendo una persona bien cultivada.

Saludos

Eternal Idol

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).
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

Debci

que diferencia hay entre usar un registro u otro? Vienen a ser como almacenes de memoria?

Saludos

Eternal Idol

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.
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

Debci


Eternal Idol

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