elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [DUDA] Siempre se hacen estan instrucciones? y porque
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [DUDA] Siempre se hacen estan instrucciones? y porque  (Leído 4,269 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
[DUDA] Siempre se hacen estan instrucciones? y porque
« en: 21 Noviembre 2011, 08:11 am »

hola! tengo una duda sobre unas instrucciones que e visto creo que en todos
los programas de 16 bits :P son estas:

data segment
    pDATA db "DATA...DATA"
ends

...

    mov ax, data
    mov ds, ax
    mov es, ax


yo quisiera saber que se hace exactamente :P y porque tambien tengo duda de porque se hace eso :P
bueno lo que yo entiendo es que se pasa el contenido de "data" osea las variables y todo al registro ax.
pero si en "data" estuvieran muchas variables, constantes, etc no cupieran en AX :P
lo que e pensado es que quiza solo se pasa la direccion :P  bueno se supone que "data" es el segmento de datos no?
y porque luego ese contenido en AX se pasa al segmento de datos? no se supone que ya los datos estaban
en el segmento ?

mil gracias ;D



En línea

MasterPM2


Desconectado Desconectado

Mensajes: 425


,.-~´¨¯¨`·~-.¸--$4(_Må§të®-Þåølø™_)-$-,.-~´¨¯¨`·~-


Ver Perfil
Re: [DUDA] Siempre se hacen estan instrucciones? y porque
« Respuesta #1 en: 21 Noviembre 2011, 09:36 am »

ya no me acuerdo lol
lo que si recuerdo es que si dices "mov ax,data" estas pasando el contenido de data hacia el registro AX.. no viceversa..
aww extrano este lenguaje quisiera retomarlo :)


En línea

ANBU暗部   Ansatsu Senjutsu Tokushu Butai暗殺戦術特殊部隊 Fuerza militar especial táctica de eliminación........MyDarker Sid3

<firma retirada, no la vuelvas a poner o se te sancionara>  <- - Amenazas
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: [DUDA] Siempre se hacen estan instrucciones? y porque
« Respuesta #2 en: 21 Noviembre 2011, 13:55 pm »

ya no me acuerdo lol
lo que si recuerdo es que si dices "mov ax,data" estas pasando el contenido de data hacia el registro AX.. no viceversa..
aww extrano este lenguaje quisiera retomarlo :)
NO es obligatorio responder. Menos si la respuesta puede estar equivocada.


En DOS los segmentos pueden apuntar a distintos lugares; algunas de las interrupciones dependen de los segmentos.
Por ejemplo LODSB lee un byte de DS:SI, y luego STOSB escribe un byte en ES:DI.
Por eso los segmentos tienen que estar bien configurados.

El segmento de datos esta ahi, pero quien te dice que no puedes tener otro. Y ademas, el ensamblador no te inicia los registros con valores, por lo tanto es el programador que tiene que asegurarse que este bien inicializado.

En resumen, lo que se hace es inicializar el registro de segmento de datos (DS), para que apunte al segmento correcto. Y Al registro ES para que apunte al mismo segmento.

Saludos.
« Última modificación: 21 Noviembre 2011, 15:21 pm por _Enko » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: [DUDA] Siempre se hacen estan instrucciones? y porque
« Respuesta #3 en: 21 Noviembre 2011, 18:33 pm »

e entendido lo que hace _Enko, pero entonces para entenderlo lo e pensado asi :P
un bloque de memoria ( segmento de datos... ) el SO ya sabe que ese bloque de memoria
es el segmento de datos pero el programa no... por eso hay que inicializarlo estoy correcto? :P

por otra parte lo que no entiendo es que , la instruccion :
mov ax, data

mueve a AX el contenido, pero AX es de 16bits y las en data pueden haber muchas variables sobre pasando los 16 bits, como es que no daria error quiza de desbordamiento ,nose :P o alguno otro...

lo demas me a quedado claro gracias _Enko ;D

En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: [DUDA] Siempre se hacen estan instrucciones? y porque
« Respuesta #4 en: 21 Noviembre 2011, 18:56 pm »

"data" seria una label que indica donde comienza el segmento de datos.

que se llame "data" no quiere decir que es segmento de datos... es un nombre de fantasia, se podria llamar de cualquier otra manera.
Nadie sabe si es o no es segmento de datos hasta que se asigne el valor a DS.

Código
  1. myNoSoyData Segment public 'no_data'
  2. SomeText DB "hello world !$"
  3. myNoSoyData EndS
  4.  
  5.  
  6. Mov AX,myNoSoyData
  7. Mov DS,AX
  8.  
  9.  

Por mas que tenga otro nombre, no pierde su naturaleza.

En el ejemplo, "myNoSoyData" es una label de 16 bit. Lo que haya dentro del segmento es otra historia.

Saludos.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: [DUDA] Siempre se hacen estan instrucciones? y porque
« Respuesta #5 en: 21 Noviembre 2011, 19:28 pm »

Gracias _Enko :D ya entendi todo ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines