NASM Boot Loader странное поведение - PullRequest
4 голосов
/ 17 октября 2011

Я пытаюсь написать загрузчик, но ни один из моих экспериментов не удался, пока я не нашел этот вопрос: Почему этот код загрузчика не работает?

Я упростил эту программу, чтобы записать только символ на экран.

[ORG 0x7C00]
[BITS 16]

realstart:
    jmp start
    nop


start:
    xor ax,ax
    mov ds,ax
    mov es,ax
    xor bx,bx
    mov ah, 0x0e
print:
    mov al, "A"
    int 0x10
end:    
    cli
    hlt  

    times 510 - ($-$$) db 0
    dw 0xAA55

Он хорошо компилируется, но в objdump нет команды int 0x10.

Если я оставлю строки ( этот файл ), все будет работать нормально.

Где подвох?

(Компиляция с NASM 2.08.02-1 на Cygwin Win7 SP1)

Ответы [ 2 ]

0 голосов
/ 28 июня 2014
Bits 16
org 0x7c00
start:
xor ax,ax
mov ah,0x0E
mov al,'A'
int 10h
mov al,10h
int 16h
int 19h
hlt
times 510-($-$$) db 0
dw 0xAA55

Попробуйте этот код. Если он не работает, дайте мне знать.

0 голосов
/ 17 октября 2011

Кажется, с кодом все в порядке.Было бы очень странно, если бы разборка кода с помощью ndisasm привела к отсутствию int 0x10.Так что я думаю, вы говорите о сбросе кода во время выполнения.Загрузочный сектор обычно содержит загрузочную запись сразу после инструкции перехода (которая сообщает загрузчику о размере носителя и т.п.).Возможно, по какой-то причине BIOS вмешивается в то, что считает загрузочной записью?

...