Я пишу небольшую операционную систему - для практики. Я начал с загрузчика. 
 Я хочу создать небольшую систему команд, которая работает в реальном режиме 16 бит (на данный момент). 
Я создал загрузчик, который сбрасывает диск, а затем загружает сектор после загрузчика. 
Проблема в том, что после jmp ничего не происходит.
Я пытаюсь загрузить следующий сектор на 0x7E00 (я не совсем уверен, как указать адрес с помощью es: bx, так что это может быть проблемой, я считаю, что его адрес: смещение) сразу после загрузчика.
Это код:
;
; SECTOR 0x0
;
;dl is number of harddrive where is bootloader
org 0x7C00
bits 16
;reset hard drive
xor ah,ah
int 0x13
;read sectors
clc
mov bx,0x7E00
mov es,bx
xor bx,bx
mov ah,0x02 ;function
mov al,0x1  ;sectors to read
mov ch,0x0  ;tracks
mov cl,0x1  ;sector
mov dh,0x0  ;head
int 0x13
;if not readed jmp to error
jc error
;jump to 0x7E00 - executed only if loaded
jmp 0x7E00
error:
    mov si,MSGError
    .loop:
        lodsb
        or al,al
        jz .end
        mov ah,0x0E
        int 0x10
        jmp .loop
    .end:
        hlt
MSGError db "Error while booting", 0x0
times 0x1FE - ($ - $$) db 0x0
db 0x55
db 0xAA
;
; SECTOR 0x1
;
jmp printtest
;definitions
MSGLoaded db "Execution successful", 0x0
;
; Print function
; si - message to pring (NEED TO BE FINISHED WITH 0x0)
printtest:
    mov si,MSGLoaded
    .loop:
        lodsb
        or al,al
        jz .end
        mov ah,0x0E
        int 0x10
        jmp .loop
    .end:
        hlt
times 0x400 - ($-$$) db 0x0
Я тестировал этот код с помощью VirtualBox, но ничего не происходит, ошибка чтения не отображается, а также сообщение, которое должно быть напечатано.
