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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 ... 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [41] 42 43
401  Programación / ASM / Re: Declaracion de segmentos en TASM en: 9 Mayo 2020, 17:16 pm
Eso último entre comillas simples es el nombre de "clase". El ensamblador pone juntos en memoria los segmentos pertenecientes a una clase, independientemente del orden en que hayan sido declarados o si están en diferentes archivos. Hay algunos nombres predefinidos y "code" es uno de ellos. Ése es básicamente su uso.
Lo intuia... aunque me considero demasiado poco experto aun para permitirme confiar en mi intuicion.
Gracias, ahora comprendo la expresion correctamente.

por suerte
Me parece demasiado arriesgado hablar de suerte y de ensamblador en el mismo contexto...  :-X
Saludos.
402  Programación / ASM / Re: Declaracion de segmentos en TASM en: 8 Mayo 2020, 11:15 am
Nada mejor que probar para averiguar.

Si, en verdad.

Gracias por tu ayuda.



Al especificar BYTE, WORD, etc. al definir un segmento, estamos indicando cómo queremos que esté alineada la dirección donde comienzan las instrucciones o datos contenidos en él, pero el segmento en sí siempre estará en dirección múltiplo de 16.
Me alegra que comentes esto porque supuse que a algo parecido tenia que referirse el manual con aligned.
Y ¿se especifica de esta manera para que el direccionamiento comienze en la proxima direccion, o mas precisamente para que la forma de acceso por defecto al segmento sea BYTE, WORD, etc.?

se busca la primera dirección disponible que sea múltiplo de 2
Esto como una implicacion de lo anterior, ¿no?.

para que no se superpongan sus datos, el byte de seg1 no tendrá un offset de 0 sino de 2.
¿Y como el procesador deduce este offset al momento de acceder al segmento?
¿O debe ser especificado explicitamente en el programa?.  
Gracias por la ayuda.


es necesario contar tanto con el selector de segmento como con el desplazamiento (offset) para para obtener una direccion segmentada con la que poder trabajar.



The segment address is always added to a 16-bit offset in the instruction to yield a linear address, which is the same as physical address in this mode. For instance, the segmented address 06EFh:1234h (here the suffix "h" means hexadecimal) has a segment selector of 06EFh, representing a segment address of 06EF0h, to which the offset is added, yielding the linear address 06EF0h + 1234h = 08124h.

Because of the way the segment address and offset are added, a single linear address can be mapped to up to 212 = 4096 distinct segment:offset pairs. For example, the linear address 08124h can have the segmented addresses 06EFh:1234h, 0812h:0004h, 0000h:8124h, etc.

https://en.wikipedia.org/wiki/X86_memory_segmentation


Esto responde mi pregunta.

Ahora solo me pregunto que quiere decir 'code' en esa expresion. Sin embargo probablemente consiga la respuesta en seguida en el manual de TASM 5.
Respecto a lo que comentas, Eternal Idol, acerca de ello, no estoy seguro... claramente tiene que ver con codigo pero me pregunto mas bien como es precisamente esta relacion. Ya que, si en vez de 'code', lo expresas asi:

Código
  1. SEGMENT cseg 'code'
  2.  

Resulta en lo mismo que:

Código
  1. SEGMENT cseg 'qiwnef' ;(una cadena random)
  2.  

Esto concluye claramente en la poca importancia de ello, sin embargo me sigue intrigando.

Saludos.
403  Foros Generales / Foro Libre / . en: 6 Mayo 2020, 17:18 pm
.
404  Programación / Programación General / Re: Escribir en un disco NTFS desde la BIOS en: 6 Mayo 2020, 16:51 pm
La BIOS deja en el registro dl el disco principal del sistema, para escribir puedes usar este código:

https://wiki.osdev.org/ATA_read/write_sectors

Muchas gracias, no es precisamente lo que buscaba (el trato con datos en bruto) pero sin duda sera util. Creo que deberia considerar llevarlo un poco mas profundamente y escribir con ello en C algun driver simple para NTFS o FAT.

Saludos y gracias de nuevo.
405  Programación / ASM / Re: Declaracion de segmentos en TASM 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.
406  Programación / ASM / Re: Declaracion de segmentos en TASM 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.
407  Programación / ASM / Re: Declaracion de segmentos en TASM 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?
408  Programación / ASM / Re: Declaracion de segmentos en TASM 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.
409  Programación / ASM / 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.
410  Programación / Programación General / Escribir en un disco NTFS desde la BIOS en: 28 Abril 2020, 23:01 pm
Hola.

Me he planteado esto desde hace poco y honestamente no se por donde empezar.
Lo que planeo es lo que planteo en seguida:

Quiero guardar un programa en el sector MBR de una forma de almacenamiento extraible que verifique que existe un disco conectado a la interfaz IDE y luego simplemente escribir contenido en el, suponiendo que el sistema de archivos es NTFS. En realidad lo menos importante es el sistema de archivos. Solo es una cuestion de conocer su opinion, ya que es primera vez que intento algo asi.
Mi idea es compilar el kernel de Linux en la unidad de almacenamiento y utilizar los controladores y API del mismo para efectuar la escritura -me pregunto si alguien penso en que haria yo mismo esta parte de mi objetivo solo con interrupciones de la BIOS.

Mi pregunta concreta es: si lo hago de esta forma, ¿funcionaria?

Posdata: se que estoy rechazando la adrenalina de intentarlo a ciegas... solo me estoy permitiendo un pequeño guiño.  :silbar:

Muchas gracias de antemano. Saludos.
Páginas: 1 ... 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [41] 42 43
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines