虚拟框vdi Nasm跳

时间:2012-11-07 21:24:39

标签: assembly x86 virtualbox nasm x86-16

我正在研究引导加载程序。也就是说,我正在尝试使用Nasm编写简单的bootloader,它将在VB(vdi磁盘)中运行。目前,我确实为测试目的设置了一个虚拟机环境,并成功加载了驻留在绝对地址(HXD十六进制编辑器)0x2000上的MBR。但现在我想跳到MBR(0x2200大端)之外并执行驻留在那里的代码(下面的代码段不起作用)。我使用Nasm指令[org 0x7C00],跳转时是否必须使用此偏移量?

[BITS 16]
[org 0x7C00]

%define location 0x0022

start:

    mov al, 0x12
    mov ah, 0
    int 0x10

    jmp location:0000

TIMES 510 - ($ - $$) db 0
DW 0xAA55

这是来自vdi的十六进制视图(2000h是MBR开始的地方,2200h是我想跳的地方):

Hex view

1 个答案:

答案 0 :(得分:1)

引导扇区将加载到地址0x7c00(由于实模式段的特殊性,可以通过多种方式进行寻址。两个常见的是0:0x7c00和0x7c0:0 - 你不应该依赖一个特别的)。它在磁盘映像中偏移量为0x2000的事实可能是由于所述映像的格式,它与内存地址无关。此外,引导过程仅加载512字节的单个扇区,如果您需要更多,则必须自己加载它。然后你可以使用你加载它的地址跳转到它。