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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Declaracion de segmentos en TASM
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Declaracion de segmentos en TASM  (Leído 10,532 veces)
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Declaracion de segmentos en TASM
« en: 2 Mayo 2020, 17:53 pm »

Hola.

Me preguntaba si alguien conoce la sintaxis de la directiva SEGMENT en TASM.
Por ejemplo, en el siguiente codigo:

Código:
segment cseg para word 'code'

Entiendo que cseg precisa el nombre del segmento que se esta declarando pero, ¿que significa para, word y 'code'?

Segun el sentido logico se que puedo deducir que para se refiere a que hablamos de parrafo (es decir, 16 bytes), que word quiere decir que sera accedido como 16 bits y que 'code' algo que tenga que ver con codigo... pero son deducciones a priori y me gustaria saber que significan realmente ya que podria estar equivocado.

Nota: respecto a word... ¿no seria innecesario, tomando en cuenta que un segmento ya es de 16 bits?

Gracias de antemano y saludos.


« Última modificación: 2 Mayo 2020, 18:49 pm por marax » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Declaracion de segmentos en TASM
« Respuesta #1 en: 2 Mayo 2020, 18:53 pm »

Esto es practicamente arqueologia:
WORD Start segment on the next word-aligned address.
PARA Start segment on the next paragraph (16-byte aligned) address.

'code' me imagino que es el nombre del segmento, cuyo tipo sera cseg que asumo es un alias de codeseg o semejante. No se que sentido tiene usar para y word al mismo tiempo.

http://bitsavers.informatik.uni-stuttgart.de/pdf/borland/turbo_assembler/Turbo_Assembler_Version_5_Users_Guide.pdf


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
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Declaracion de segmentos en TASM
« Respuesta #2 en: 2 Mayo 2020, 21:29 pm »

WORD Start segment on the next word-aligned address.
PARA Start segment on the next paragraph (16-byte aligned) address.

Esta bien... espero no sea tonta la preguta, pero ¿que sentido tiene especificar un segmento que comienza en el siguiente word alineado, si sin embargo el rango de direccionamiento de un segmento es de 16 bytes?
Es decir, hago la pregunta suponiendo que se refiere a que si el segmento comenzara en la direccion real 0000, especificando word comenzaria en 0002.

Gracias por responder.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Declaracion de segmentos en TASM
« Respuesta #3 en: 2 Mayo 2020, 22:59 pm »

Esta bien... espero no sea tonta la preguta, pero ¿que sentido tiene especificar un segmento que comienza en el siguiente word alineado, si sin embargo el rango de direccionamiento de un segmento es de 16 bytes?
Es decir, hago la pregunta suponiendo que se refiere a que si el segmento comenzara en la direccion real 0000, especificando word comenzaria en 0002.

Gracias por responder.

No se que tiene que ver una cosa con la otra sinceramente.

Del mismo manual:

Segment alignment attribute
"The segment alignment attribute tells the linker to ensure that a segment begins on a
specified boundary. This is important because data can be loaded faster on the 80x86
processors if it's properly aligned. The following table lists legal values for this attribute."

Si la direccion que correspondiese a ese segmento fuera (0x0) ningun alineamiento la moveria ya que es divisible por cualquier valor, pero supongamos que tenemos un segmento de datos previo de 0x7 bytes, entonces con un alineamiento PARA haria que el segundo segmento arrancase en 0x10 (la siguiente direccion divisible por 16) y no en 0x7.
« Última modificación: 2 Mayo 2020, 23:03 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
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Declaracion de segmentos en TASM
« Respuesta #4 en: 3 Mayo 2020, 13:58 pm »

Si la direccion que correspondiese a ese segmento fuera (0x0) ningun alineamiento la moveria ya que es divisible por cualquier valor, pero supongamos que tenemos un segmento de datos previo de 0x7 bytes, entonces con un alineamiento PARA haria que el segundo segmento arrancase en 0x10 (la siguiente direccion divisible por 16) y no en 0x7.
Si, esto lo entiendo. Pero bajo las mismas condiciones, ¿en que cambiaria especificar WORD, en vez de PARA?
Es decir, especificando PARA el segmento comenzaria en el siguiente parrafo alineado, pero ¿y especificando WORD?
Se lo que dice el manual:
Citar
Start segment on the next word-aligned address

Sin embargo no se a lo que se refiere, es decir, no se lo que significa.
Bajo las condiciones que supones, si en vez de PARA se especificase WORD, ¿como cambiaria el resultado?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Declaracion de segmentos en TASM
« Respuesta #5 en: 3 Mayo 2020, 14:42 pm »

WORD son 2 bytes asi que arrancaria en 0x8 ya que 0x7 no es divisible por 2 y 0x8 si.
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
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Declaracion de segmentos en TASM
« Respuesta #6 en: 3 Mayo 2020, 15:39 pm »

Suponiendo el siguiente codigo:

Código:
.MODEL LARGE
ASSUME CS:CSEG

SEGMENT ref
DB ?
ENDS ref

SEGMENT seg1 WORD
DB ?
ENDS seg1

SEGMENT seg2 WORD
DB ?
ENDS seg2

SEGMENT cseg WORD
entry:
MOV AX, ref
MOV AX, seg1
MOV AX, seg2
ENDS CSEG

END entry

seg1, en ese caso, deberia cagarse en la siguiente direccion divisible por 2. Igualmente seg2.
Sin embargo esto resulta realmente:


(se cargan en la misma direccion)

No entiendo por que.

Gracias por tu tiempo.
« Última modificación: 3 Mayo 2020, 15:47 pm por marax » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Declaracion de segmentos en TASM
« Respuesta #7 en: 3 Mayo 2020, 19:18 pm »

Lo que esta poniendo ahi en AX es el valor del segmento CS.

Si usas offset para ref, seg1 y seg2 vas a ver sus direcciones (0, 2 y 4).

Código
  1. .MODEL LARGE
  2. ASSUME CS:CSEG
  3.  
  4. SEGMENT ref
  5. DB 1
  6. DB 2
  7. DB 3
  8. ENDS ref
  9.  
  10. SEGMENT seg1 WORD
  11. DB ?
  12. db 5
  13. db 7
  14. ENDS seg1
  15.  
  16. SEGMENT seg2 WORD
  17. DW 666h
  18. ENDS seg2
  19.  
  20. SEGMENT cseg WORD
  21. entry:
  22. PUSH CS
  23. POP DS
  24. mov BX, offset seg2
  25. mov AL, byte ptr [BX]
  26. MOV BX, offset ref
  27. mov AH, byte ptr [BX]
  28. MOV BX, offset seg1
  29. MOV BX, offset seg2
  30. ENDS CSEG
  31.  
  32. END entry

Si lo depuras en AX tendras 0166h, que se forma con los primeros bytes de ref y seg2. Arrancan en 0, 4 y 8. Si cambias el WORD de seg1 y seg2 por BYTE entonces arrancan en 0, 3 y 6 respectivamente.
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
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Declaracion de segmentos en TASM
« Respuesta #8 en: 4 Mayo 2020, 16:02 pm »

Si lo depuras en AX tendras 0166h, que se forma con los primeros bytes de ref y seg2. Arrancan en 0, 4 y 8. Si cambias el WORD de seg1 y seg2 por BYTE entonces arrancan en 0, 3 y 6 respectivamente.
Eso quiere decir que ref, seg1 y seg2 se cargan contiguamente respecto a CS, ¿no?. Honestamente pense que los segmentos se cargaban en el orden en el que son especificados en el codigo fuente.

Modifico:
Otra pregunta, si no es molestia... ¿y si el contenido del segmento es mayor al rango de direccionamiento especificado?

Gracias, saludos.
« Última modificación: 4 Mayo 2020, 17:41 pm por marax » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Declaracion de segmentos en TASM
« Respuesta #9 en: 6 Mayo 2020, 17:17 pm »

Honestamente pense que los segmentos se cargaban en el orden en el que son especificados en el codigo fuente.

Tanto en tu ejemplo como en el mio lo hacen, presta atencion al punto de entrada del codigo.

Otra pregunta, si no es molestia... ¿y si el contenido del segmento es mayor al rango de direccionamiento especificado?

Nada mejor que probar para averiguar.
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
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
<<<<<TASM - AYUDA>>>>> Pls...
Ingeniería Inversa
Amerikano|Cls 1 4,189 Último mensaje 20 Septiembre 2007, 20:05 pm
por byebye
no me sale un exe. al compilar con tasm
ASM
javier210186 4 5,312 Último mensaje 8 Diciembre 2009, 00:40 am
por javier210186
como instalar tasm
ASM
karmi 1 5,718 Último mensaje 4 Febrero 2011, 00:34 am
por Garfield07
TASM Suma de numeros
ASM
lexoazul 4 11,615 Último mensaje 12 Marzo 2012, 14:03 pm
por lexoazul
Ayuda suma en TASM
ASM
BetoRoGa 1 4,365 Último mensaje 18 Octubre 2015, 06:31 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines