2012-11-07 57 views
0

我正在研究引導程序。也就是說,我正在嘗試使用將在VB(vdi磁盤)中運行的nasm編寫簡單的bootloader。現在,我確實設置了一個用於測試目的的虛擬環境,併成功加載了駐留在絕對地址(HXD十六進制編輯)0x2000上的MBR。但現在我想跳到MBR(0x2200大端)之外,並執行駐留在那裏的代碼(Bellow代碼片段不執行此任務)。我使用NASM指令[組織0x7C00],在跳轉時是否必須使用此偏移量?虛擬盒vdi nasm jump

[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

引導扇區將在地址0x7c00被加載(其中,由於實模式段的特殊性,可以用多種方式來解決,兩種常見的是0:0x7c00和0x7c0:0 - 你不應該依賴特定的一個)。它在磁盤映像的偏移量爲0x2000的事實可能是由於所述映像的格式造成的,它與內存地址無關。另外,引導過程只加載一個512字節的單個扇區,如果您需要更多,您必須自己加載它。然後,您可以使用您加載的地址跳轉到該地址。