Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: lucaslopez0000 en 22 Junio 2013, 11:09 am



Título: [SOLUCIONADO] ¿ Por qué DB ?
Publicado por: lucaslopez0000 en 22 Junio 2013, 11:09 am
Hola , he estado esta semana aprendiendo ensamblador , y he visto que en un bootloader que muestra hola mundo con interrupciones de la bios , una parte del codigo dice mensaje DB "Hola mundo" , 0
Sin embargo DB significa define byte , y la cadena hola mundo tiene mas de un byte ¿ Entonces por qué usan DB al declararla ? Muchas gracias
PD : El codigo que vi es correcto seguro


Título: Re: ¿ Por qué DB ?
Publicado por: xv0 en 22 Junio 2013, 12:00 pm
Declara byte a byte lo que esta dentro de las comillas, y sin olvidarte del cero, que esta separado con una coma.

Eso se puede hacer así:

Código
  1. .byte 0x48,0x6f,0x6c,0x61,0x20,0x6d,0x75,0x6e,0x64,0x6f,0x00  ; .long equivale a DB

Esto se podría también hacer de esta forma:

Código
  1. a: .long 0x616c6f48  ; DD
  2. b: .word 0x6d20,0x6e75  ; DW
  3. c: .byte 0x64,0x6f,0x00  ; DB

Puedes hacerlo de muchas formas, igualmente los bytes serán cargados en memoria.

Un saludo.


Título: Re: ¿ Por qué DB ?
Publicado por: lucaslopez0000 en 22 Junio 2013, 22:05 pm
Declara byte a byte lo que esta dentro de las comillas, y sin olvidarte del cero, que esta separado con una coma.

Eso se puede hacer así:

Código
  1. .byte 0x48,0x6f,0x6c,0x61,0x20,0x6d,0x75,0x6e,0x64,0x6f,0x00  ; .long equivale a DB

Esto se podría también hacer de esta forma:

Código
  1. a: .long 0x616c6f48  ; DD
  2. b: .word 0x6d20,0x6e75  ; DW
  3. c: .byte 0x64,0x6f,0x00  ; DB

Puedes hacerlo de muchas formas, igualmente los bytes serán cargados en memoria.

Un saludo.

Muchas gracias por responder , es decir que si me ha quedado claro es el propio programa ensamblador el que sustituye la definicion de un string por la de todos sus caracteres. Tambien me he dado cuenta de que la manera de declararlas varia de un ensamblador a otro ( de nasm a gas por ejemplo ) Tambien me he dado cuenta de que te lo incrusta en el archivo , ya que por ejemplo el bootloader que estoy estudiando usa la directiva times para rellenar con ceros hasta los 510 bytes. luego agrega los 2 ultimos bytes de firma bootloader. Como la bios carga 512 bytes asi tendrias cargado el string en memoria para hacer lo que proceda. Muchas gracias me ha sido de ayuda tu respuesta :)


Título: Re: ¿ Por qué DB ?
Publicado por: xv0 en 22 Junio 2013, 22:23 pm
es decir que si me ha quedado claro es el propio programa ensamblador el que sustituye la definicion de un string por la de todos sus caracteres.

Si, las definiciones solo valen para "ayudar" a entenderlo mejor, pero como ya te dije es lo mismo.

Tambien me he dado cuenta de que te lo incrusta en el archivo

Exacto, todo los bytes estan en la section data, dale un disassembler a esa section para entenderlo todo. Contra más datos mayor sera el peso del ejecutable.

Un saludo.