es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué se está llamando a mi subrutina de ensamblador aunque no la estoy llamando en _start en mi cargador de arranque?

Actualmente estoy desarrollando un cargador de arranque del BIOS y soy nuevo en ensamblador. He estado leyendo al respecto y entiendo cómo funciona, pero hay algunas cosas que no entiendo sobre la secuencia de ejecución de mi código ensamblador.

Básicamente, ¿cómo se llama a mi subrutina _print, aunque no la estoy llamando?
Además, ¿cómo se está asignando el número mágico del BIOS si está al final del archivo y no llego a él?

Agradecería cualquier ayuda. Gracias.

[ORG 0000:7C00]

global _start 

_print:
    mov ah, 0x0e 
    mov al, '['
    int 0x10
    mov al, '+'
    int 0x10
    mov al, '['
    int 0x10
    ret

_start:
    jmp $

times 510 - ($-$$) db 0
dw 0xAA55
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que su subrutina _print se está llamando porque está siendo referenciada por la etiqueta _start, a la cual se accede con jmp $.

    En cuanto al número mágico del BIOS, aunque se encuentra al final del archivo, se asigna y se establece mediante la instrucción dw 0xAA55 justo antes del final del código. Esta instrucción establece el valor de dos bytes 0xAA55 al final del código, el cual es el número mágico del BIOS que marca el cargador como arrancable.

    ¡Espero que esto aclare las cosas!

Comments are closed.