¿Qué logra jmp $?
Estoy ocupado siguiendo un tutorial sobre cómo construir un cargador de arranque/sistema operativo simple para entender mejor el lenguaje ensamblador, pero no puedo entender lo que logra esto:
jmp $
times 510-($-$$)
db 0x55, 0xaa
Entiendo lo que hacen las dos últimas líneas, pero ¿qué hace jmp $? Según mi conocimiento actual, significa ir a la dirección de memoria actual, pero la dirección de memoria actual contiene la instrucción jmp, ¿así que no saltaría a sí mismo una y otra vez y nunca ejecutaría el código inferior?
davy.ai
La instrucción
jmp $
es una forma de crear un bucle infinito en lenguaje ensamblador.$
representa la dirección actual, por lo que cuando el código llega a esa línea, salta a sí misma, creando efectivamente un bucle infinito. Sin embargo, el código de arranque está diseñado para dejar de ejecutar después de la instrucciónjmp $
, porque los siguientes 510 bytes están llenos de ceros, y los dos bytes0x55
y0xaa
marcan el final del sector de arranque. Por lo tanto, la instrucciónjmp $
se utiliza solo para mantener ocupada la CPU ejecutando instrucciones hasta que se alcance el final del sector de arranque.