Помогите с загрузчиком
IDEAL
model tiny
codeseg
start:
xor ax,ax
cli
mov ax,cs
mov ss,ax
mov ds,ax
lea sp,[start]
sti
mov si,offset msg
mov ah,0eh
lodsb ;здесь должны
int 10h ;были вывестись
lodsb ;три символа
int 10h ;
lodsb ;
int 10h ;
cli
hlt
msg:
db 'abs'
end start
но почему он выводит вообще другую инфу
зачем все эти извращения с созданием дескрипторов?
GDT:
NULL_descr db 8 dup(0)
CODE_descr db 0FFh,0FFh,00h,00h,00h,10011010b,11001111b,00h
DATA_descr db 0FFh,0FFh,00h,00h,00h,10010010b,11001111b,00h
VIDEO_descr db 0FFh,0FFh,00h,80h,0Bh,10010010b,01000000b,00h
GDT_size equ $-GDT
и больше ничего не надо! селектор для данных является одновременно селектором для стека.
Бинарник в виде образа дискеты запустить в боксе элементарно. Берешь имеющийся конфиг-файл и изменяешь в нем след параметры:
boot: floppy
floppya: 1_44="имя файла с образом дискеты в кавычках", status=inserted
после чего запускаешь бокс с этим конфиг-фалом.
Лучше, чтобы и видеобуфер находился в том же сегменте, что и данные. А про 16-разрядные и к тому же маленькие сегменты в PM лучше забыть.
Evgeni, насчет функции, формирующей дескриптор, - в данном случае, повторяю, она тебе совершенно не нужна. К тому же ты задаешь базу сегментов защищенного режима на основе значения cs. Так поступают опять-таки только тогда, когда не знают этого значения. В твоем случае база должна быть равна нулю, т.к. дополнительной директивы org я нигде не увидел. Я в начале тебе уже показывал, как можно располагать сегменты (столь титанический труд так и остался не востребованным :-) ). В твоей ситуации проще использовать FLAT-модель. Короче, вот работающий исходник, написанный на основе твоего кода, - можешь использовать...