Мне трудно понять, как работает простой загрузчик.Загрузчик, о котором я говорю, - это курс MIT "Разработка операционных систем".
Сначала позвольте мне показать вам фрагмент кода сборки, который выполняет BIOS:
[f000:fec3] 0xffec3: lidtw %cs:0x7908
[f000:fec9] 0xffec9: lgdtw %cs:0x7948
[f000:fecf] 0xffecf: mov %cr0,%eax
[f000:fed2] 0xffed2: or $0x1,%eax
[f000:fed6] 0xffed6: mov %eax,%cr0
[f000:fed9] 0xffed9: ljmpl $0x8,$0xffee1
Судя по всему, этот код устанавливает таблицу прерываний и таблицу дескрипторов, а затем поворачиваетв защищенном режиме.
- Почему мы переходим в защищенный режим в BIOS?Разве загрузчик не должен работать в реальном режиме (кстати, зачем ему работать в реальном режиме?)
- Я искал, но нигде не нашел точно, как работает инструкция ljmpl, и в чем разница?и ljmp и обычный jmp - я был бы признателен, если бы кто-то указывал в правильном направлении.
- Почему мы выполняем прыжок?Какова цель этой инструкции?
Переход к коду загрузчика -
# Switch from real to protected mode, using a bootstrap GDT
# and segment translation that makes virtual addresses
# identical to their physical addresses, so that the
# effective memory map does not change during the switch.
lgdt gdtdesc
movl %cr0, %eax
orl $CR0_PE_ON, %eax
movl %eax, %cr0
# Jump to next instruction, but in 32-bit code segment.
# Switches processor into 32-bit mode.
ljmp $PROT_MODE_CSEG, $protcseg
- Это говорит о том, что процессор находится в реальном режиме - но мы только что увидели, что BIOS переключается в защищенный режим... я в замешательстве - как это возможно?
- Как перейти в 32-битный режим?Что заставляет процессор магически переходить в 32-битный режим из-за инструкции ljmp?
И еще одна вещь, которую я не понимаю - когда я отслеживаю выполнение загрузчика с помощью gdb, я вижу следующую инструкциювыполняется (это инструкция ljmp из кода загрузчика):
ljmp $0x8,$0x7c32
Но когда я посмотрел в файле .asm, я увидел следующее:
ljmp $0xb866,$0x87c32
Полностью потерян здесь - Какприходят инструкции, написанные в файле .asm, и выполняемые инструкции отличаются?У меня есть предчувствие, что это связано с защищенным режимом и с тем, как он переводит адреса, но я на самом деле не понимаю.
Буду признателен за любую помощь!