viernes, 16 de diciembre de 2011

How to pt1.: Imprimir en pantalla

Este How to trata sobre cómo escribir en pantalla, para esto tratare de ser lo mas gráfico y explicativo posible, para evitar cometer los errores que muchas páginas (y personas que no nombrare) han cometido.

Modo Real:
Escribir en el Modo Real es bastante fácil, ya que se ocupan las interrupciones de la BIOS, la cual en este caso es 10h.

[BITS 16]
[ORG 7C00h]
jmp main
bootmesg db "Loading... please wait... ",0Dh,0Ah,0
print_mesg:
   mov ah,13h     ;Llama a la función 13h
   mov al,00h     ;Modo de escritura
   mov bx,0007h  
   mov cx,1Ah     ;Indica que el numero de caracteres es 26
   mov dx,0000h
   mov bl,07h
   int 10h        ;Llama a la interrupcion 10h

main:
   mov bp, bootmesg
   call print mesg
times 510-($-$$) db 0
db 0x55
db 0xAA


Modo Protegido:
Escribir en el Modo Protegido, a pesar de no ser tan fácil como en el Modo Real, es igualmente fácil, sólo se necesita unas declaraciones y un bucle.

mov ax, 10h
mov ds, ax
mov ss, ax
mov esp, 090000h
mov esi,words
xor edx,edx
loop0:
    mov word cx,[esi]
    mov word [ds:0B8000h+160d+edx],cx
    inc edx
    inc esi
    cmp byte [esi],0
    jnz loop0

words db 'Epspcprpipbpap pspup ptpepxptpop apqpupip',0Dh,0A,0


Aclaro que este código no lo he escrito yo, si no que lo encontre en internet y la verdad es que funciona bastante bien, aun que me encuentro en estos momentos buscando una forma de optimizar el código y buscar las funciones extras.
La letra p entre cada letra del texto a mostrar indica que el texto estara escrito en color negro con fondo gris y estoy tratando de encontrar una forma de escribir en gris con fondo negro.
Cualquier aporte porfavor un comentario o un mensaje en la sección Contacto.

1 comentario: