Ребят привет, слушайте тему, чё то недавно обкурился %) решил написать ос! (это было ещё зимой). Смотрю на другие загрузчики, смотрю (из тех что мне попадались) пишут: ; trali vali .... ; initializeywen stack cli ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! kak po mne etogo ne nada mov ss, ax mov sp, gora sti ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! i etogo to*e ! вообщем, я знаю, где то я читал, что процы, покрайне мере фирмы Intel (а все другие фирмы второсортного поколения с них шкрябают основу) при загрузке сег. рега стека (mov ss, daun) проц запрещает апаратные и немаскируемые прер-ния, на время ,выполнению след. команды. Какие априории вы мне скажете по этому поводу - дорогие друзья ? %)
0136 Ну, а вот если мы еще раз хорошенько вдунем и подумаем, что будет если некое прерывание навестит нас между командами "mov ss, ax", "mov sp, gora" и его обработчик потрогает что-то в текущем стеке(например, сохранит там любое значение), что будет?
mathio Ничего не будет. Прерывание не будет доставлено. 0136 Я такое тоже встречал, кажется в загрузчиках от MS. Может, просто от незнания воткнули?
я тоже думаю - от не знания - что в который раз доказывает - знание сила ! которая в вышепривидённом случае даёт нам 2 байта%))
Очень даже будет А мануал вы не тот процитировали, жаль на 8086 счас мана уже не найти Блокировка прерываний на одну инструкцию после записи в ss появилась начиная с 80286. На 8086 и 80186 очень даже может всё упасть. Так что не от незнания, а для универсальности
итак, при старте системы все прерывания отключены и есчё один "cli" просто не нужен. Потом без прерываний переставляется стёк на нужную позицию и ставится "sti". Не нужно так сильно заострять внимание на экономию нескольких байт за счёт совместимости, ведь не факт, что, допустим, амд не провмыкает эту возможность(свойство).
Вообще-то, как можно убедиться, прерывания включены, и cli может понадобиться. Убедиться в этом можно, в загрузчике написав jmp $ и увидеть, что во время исполнения этого кода будет переключаться NumLock, а также по таймеру погаснет светодиод на FD.
Ребята, если вы мне покажите парнишку, который, сидит хотя бы за 286 %)) тому я дам 5 баксов, ну а если ещё скажите что это девочка %)) тогда все 20 )) + конфетка ))
Ща нарою в универе, есть там такой комп и девочку из ландшафтной архитектуры для позирования пригласим С вас денежка ...
Дык вопрос не в том. А ты гарантировать можеш что твой загрузчик на 80186 никто запускать не будет? А если будет - дык просто повиснет всё. Лично я cli/sti делал+детект типа CPU, а потом уже собственно загрузка с использованием 32-битных регистров и т.д. Зато если всунуть дискету с ним даже в комп на 8086 - просто напишет "Not i386" подождёт нажатия на кнопку и ребутнется. Зависать без каких-либо сообщений не есть гуд. А во вторых 8086 очень даже найти можно - не в дэсктопах конечно, но во многих устройствах используется - не греется и жрёт мало.
Я не знаю что это за чип (советский аналог вроди??), но если надо надо интеловскую доку могу зацитировать:
Ну дык Я никого не агитирую, просто я больше за универсальность, чем за экономию. Тем более что в данном случае 2 байта ничего не решают.
Я реально имею знакомого, у которого дома комп IBM 286, с хардом на 20 метров. Причём этот комп у него единственный, и постоянно используется (он на нём в игры играется типа civ первая) чуваку 24 года. живёт в столице )))