为什么引导加载程序中的字节“0xea 0000 ffff”会导致计算机重新启动?

Why do the bytes "0xea 0000 ffff" in a bootloader cause the computer to reboot?

我在研究引导加载程序时发现了这个有趣的程序集:

;Sends us to the end of the memory
;causing reboot
db 0x0ea
dw 0x0000
dw 0xffff

通过评论我知道它的作用;将计算机发送到内存末尾,但我无法弄清楚的是 如何 这些数字重新启动计算机(x86_64 16 位模式下的处理器)。

这是一个到旧8086复位地址的远跳转指令。当 8086 被重置时,它将开始执行 FFFF:0000 处的指令。出于兼容性原因,现代 BIOS 实现在此处跳转到其重置代码,尽管现代 CPU 的重置地址不同。

那些字节对应于jmp word 0xffff:0000(你可以通过NASM汇编然后反汇编生成的二进制文件来看到这一点),这恰好是跳转到x86 reset vector模式。