Первая инструкция.
Маленькое открытие. После RESET# x86 процессоры начинают выполнение команд в реальном режиме (AKA real mode). CS и IP при этом устанавливаются в 0xf000 и 0xfff0 соответственно. Значит первая инструкция должна находится в пределах первого мегабайта, по адресу 0x000ffff0. Правильно? Не правильно. На самом деле, первая инструкция живет по адресу 0xfffffff0, так как база селектора CS после сброса устанавливается в 0xffff0000.
The first instruction that is fetched and executed following a hardware reset is located at physical address FFFFFFF0H. This address is 16 bytes below the processor’s uppermost physical address. The EPROM containing the software-initialization code must be located at this address.
The address FFFFFFF0H is beyond the 1-MByte addressable range of the processor while in real-address mode. The processor is initialized to this starting address as follows. The CS register has two parts: the visible segment selector part and the hidden base address part. In real-address mode, the base address is normally formed by shifting the 16-bit segment selector value 4 bits to the left to produce a 20-bit base address. However, during a hardware reset, the segment selector in the CS register is loaded with F000H and the base address is loaded with FFFF0000H. The starting address is thus formed by adding the base address to the value in the EIP register (that is, FFFF0000 + FFF0H = FFFFFFF0H).
Это самая самая самая ужасная часть всего кернел-кодинга, я так и не смог освоить как вообще с этим работать и забросил =\
Ну и без интел мана врядли кто-то полезит кодить загрузчик
@scrat
А при чём тут загрузчик и вообще кернел? Этот инит гораздо раньше загрузчика ОС происходит. Такое актуально знать только биосописателям.
Кстати, на недо64 x86 уже такой прогрессивной вещи не сделали. Так что старт по прежнему в конце четвёртого гига, хотя особой логики в этом нет. Ну кроме разве что той, что доступ за четвёртый гиг в реальном режиме вообще архитектурой не предусмотрен
Хех. Все мы биосописатели, если на железке биоса нет.
Ну вот будет мелкоконтроллер на x86 – станет актуально.
Хотя какое же это извращение – МК на x86
Ну, то тчо тут описано, это же вроде как очевидные вещи, 286й процессор начинал исполнять код из последних 64к от 16Мб, а 386 и выше из последних 64к от 4Гб (это же классика).
На не-х86 микроконтроллерах старт происходит сильно менее похабно. Кстати в реальном писюке старт еще сложнее. Хотя-бы потому что RAM и ROM прицеплены нынче к чипсету и до того как все это заработает, чипсет по идее надо бы проинициализировать. Что как-бы некоторая проблема пока проц не стартанул еще.