Código:
En que estoy fallando? Gracias por adelantado. Uso Kubuntu, Qemu, Nasm, GCC y Kate. [BITS 16] ; Seteo a modo de 16bits q es como se encuentra el procesador al inicio [ORG 0] ; Pongo el codigo desde el principio del segmento jmp inicializar ; Voy al inicio del programa, salto todo lo q es declaraciones ;-------------------------------------------------------------- ; Datos usados en el proceso de boot-loading ;-------------------------------------------------------------- mensajeInicial db "Hola Mundo!!", 0x0D,0x0A,0 ;-------------------------------------------------------------- ; impMensaje imprime un mensaje en ascii por pantalla ;-------------------------------------------------------------- impMensaje: imprimir: lodsb ; Carga el byte q esta en ds:si en al or al,al ; Mira si el caracter es 0 (fin) jz finImpMensaje mov ah,0x0E ; Indica q la interrupcion sera para imprimir por pantalla mov bx,0x0009 ; Se indica pagina base y color de fondo int 10h ; Llamada al BIOS jmp imprimir finImpMensaje: ret ;-------------------------------------------------------------- ; Procedimiento que carga un programa contenido en el floppy ;-------------------------------------------------------------- cargarKernel: reset: mov ax, 0x0000 ; opcion para resetear el dispositivo mov dl, 0x00 ; drive=0 floppy int 0x13 ; interrupcion 13 del bios jc reset ; si hay carry es q ocurrio un error, entonces intento de nuevo cargar: mov ax, 0x1000 ; ES:BX es donde se carga lo leido por la interrupcion mov es, ax ; por lo que pongo en ES 1000 mov bx, 0x0000 ; y pongo en bx la dir 0000 mov ah, 0x02 ; con ah=2 digo q voy a leer mov al, 0x05 ; con al indico la cantidad de sectores a leer mov ch, 0x00 ; cilindro=0 mov cl, 0x02 ; sector=2 (en el 1 tengo el booteable) mov dh, 0x00 ; cabeza=0 mov dl, 0x00 ; drive=0 es el floppy int 13h ; invoco la interrupcion jc cargar ; si ocurrio un error (carry=1), intento de nuevo jmp 0x1000:0x00 ; salto a la direccion donde cargue el programa ret ; nunca va a llegar a ejecutarse ;-------------------------------------------------------------- ; Procedimiento que inicializa los registros ;-------------------------------------------------------------- inicializar: ;el BIOS me pone en el segmento 07C00h, asi q seteo los segmentos a mi posicion actual ;Asi no tenemos q añadir 07C00h a todos nuestros datos mov ax, 0x07C0 mov ds, ax mov es, ax mov fs, ax mov gs, ax ;inicializo los valores para la pila cli ;desabilito las interrupciones mov ax, 0x0000 mov ss, ax mov sp, 0xFFFF sti ;habilito nuevamente las interrupciones jmp main ;-------------------------------------------------------------- ; main del programa ;-------------------------------------------------------------- main: mov si, mensajeInicial ; Muestro el mensaje por pantalla call impMensaje call cargarKernel TIMES 510-($-$$) DB 0 ; Hace q el archivo sea de 512 bytes de longitud dw 0AA55h ; Indica al bios q es un bootstrap