[SOLUCIONADO] ¿ Por qué DB ?

Iniciado por lucaslopez0000, 22 Junio 2013, 11:09 AM

0 Miembros y 2 Visitantes están viendo este tema.

lucaslopez0000

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
La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX

cpu2

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 (asm) [Seleccionar]
.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 (asm) [Seleccionar]
a: .long 0x616c6f48  ; DD
b: .word 0x6d20,0x6e75  ; DW
c: .byte 0x64,0x6f,0x00  ; DB


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

Un saludo.

lucaslopez0000

Cita de: cpu2 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 (asm) [Seleccionar]
.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 (asm) [Seleccionar]
a: .long 0x616c6f48  ; DD
b: .word 0x6d20,0x6e75  ; DW
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 :)
La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX

cpu2

#3
Cita de: The_C_Coder en 22 Junio 2013, 22:05 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.

Cita de: The_C_Coder en 22 Junio 2013, 22:05 PM
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.