Pregunta

Estoy tratando de utilizar la interrupción del BIOS de vídeo para mostrar un carácter en la pantalla. El siguiente es el código de montaje:

mov $0x0A, %AH
mov $0x68, %AL ; to display character 'h'
int $0x10

Me montado este código ensamblador usando GNU para producir un archivo de objeto llamado sample.o El tamaño total de sample.o es de 449 bytes. Ahora escribo manualmente a este fichero objeto los dígitos hex 0x55 y 0xAA en las posiciones de bytes 511ª y 512ª con el fin de hacerla arrancable. Por eso creo que ahora tengo un sector de arranque de 512 bytes. Yo uso qemu para tratar de arrancar desde este fichero objeto:

$> qemu -fda sample.o

Los qemu emulador se inicia y se congela en el punto donde dice "El arranque desde disquete ..." Pero pensé que después de que detecte el sector de arranque del BIOS de vídeo de interrupción de código se supone que salen y mostrar un carácter en la pantalla.

Yo sé que estoy haciendo algo muy mal. Tal vez me falta todo el concepto de interrupciones. ¿Alguien puede ayudar.

EDIT: así que estoy usando ahora as86 y ld86 para producir sólo el binario plana. Y en lugar de 0x0A en AH estoy usando 0x0E y parece que lo hizo el truco. Parece problema de implementación del BIOS.

Agradezco a todos los que respondió de nuevo.

Gracias

¿Fue útil?

Solución

Un archivo .o normal contiene un poco más que sólo el código binario resultante, por lo que no es sorprendente que lo que estás haciendo no funciona (el resultado de esta debe ser alrededor de 10 bytes o menos).

o bien puede escribir un guión para ld conseguirlo para producir un binario plana (creo recordar que se supone que es posible, pero no lo he probado personalmente). Si estuviera haciendo esto, probablemente me utilizo nasm lugar, ya que puede producir una salida binaria cruda con bastante facilidad. Otra posibilidad sería que algunos viejos MS-DOS ensamblador que puede producir la salida de formato .com (que también es binario, aunque hay que tener cuidado, ya que carga un poco diferente).

Otros consejos

Es necesario pasar el valor del atributo en BL (07h es gris en negro), número de página en BH y contar en CX.

Usted dice lo compiló con el gas y le dio un archivo de 448 bytes? ¿Está montando en un archivo ELF o algo? Me gustaría recomendar nasm bin -f, usando la directiva 16 BITS.

Como dijo Jerry Ataúd, el problema es que el archivo de .o no es una imagen de disco flexible con un sector de arranque adecuado. El archivo .o contiene una gran cantidad de información, además del código, tales como nombres de símbolos y la información de reubicación.

Si está usando NASM, el uso -f bin para producir un binario. Si está utilizando LD, se puede escribir un guión de enlazado.

Para obtener ayuda con este tipo de cosas, el mejor lugar es probablemente osdev.org y su foro .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top