phantom-84 писал(а):
Код:
org 7C00h
...
jmp 0:@f
rb 7DFEh-$ ; 510-($-$$)
dw 0AA55h
@@:
...
add_sec_count = ($-($$+512)+511)/512 ; или ($-$$-1)/512, или ($-$$+511)/512-1
rb 10000h-$ ; защита от переполнения сегмента
Благодарю за пример. сегодня буду разбираться, а то не все сходу понял.
Цитата:
jmp 0000h:7DFFh ; прыгает на адрес в оперативке, который идет сразу за МБР (7c00h + 512d)
Угу ) Диплом, говоришь, собираешься защищать...
Скорее всего да)) пока хромаю в знаниях и очень, не спорю.
а что не так здесь?
Цитата:
Идея верная, только кто твое ядро загружать-то будет?
вот полный текст моего загрузчика. в конце переменная куда которая принимает ядро. по идее оно прыгает на (7c00h + 512d).
Код:
ORG 7C00h
cli
mov ax, cs
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7c00
sti
;Read our kernel in the buf . Kernel consist of one sector
mov ah,2h
mov al,1h
mov ch,0
mov cl,2
mov dh,0
mov dl,0h
xor bx,bx
mov bx,buf
int 13h
mov SI,msg ; Output 'For laoding OS press any key ...'
MOV AH, 0Eh
print: MOV AL, [SI]
CMP AL, 0
JZ done
INT 10h
INC SI
JMP print
done: mov ah,03h
xor bh,bh
int 10h
inc dh
xor dl,dl
mov ah,2h
int 10h
MOV AH, 0
INT 16h
jmp 0000h:7DFFh
msg DB 'For laoding OS press any key ...',0
jmp @1
times 510 - ($-$$) db 0
@1:
db 55h, 0aah
buf rb 512
если что не так, буду благодарен за критику.
Станислав писал(а):
invalid value : db 1024-($-7c00h) dup (0) - эта ошибка может потаму, что вы забили код на больше чем 1024 байт и заполнять нолями нечего, я пишу times 512*49 - ($-$$) db 0 и если 49 секторов не хватает добавляю ещё. Переменные можете хранить не в коде, а в каком то месте, например 07E00-9FFFF здесь, там 623104 байт минус код если вы его туда тоже грузите.
Тогда у вас код меньше будет по раэмеру за счёт отсутствия этих переменных. Константы естественно так не сделаеш из за того, что в них нужная инфа. Если бы у меня были в бинарнике переменные то он был бы больше раза в 2, особенно когда нужны списки команд для дисков или флешек их много и кождый по 1024 байт и должны быть выровнены на несколько бит.
Благодарю за совет. буду смотреть еще раз.