Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемСветлана Федотьева
1 Процессоры Intel в реальном режиме.
2 План. 1) Историческая справка. 2) Объяснение основный концепций работы с памятью. 3) Обработка прерываний. 4) Написание небольшого кода для бут сектора дискеты.
3 Какие бывают режимы. Итак, есть несколько режимов работы микропроцессоров Intel: 1) Реальный режим (real mode) является самым простым и старым в этой линейке процессоров. Отличается малой продуктивностью. 2) Защищённый режим на сегодняшний день самый популярный, так как именно благодаря ему процессоры раскрывают все свои возможности. 3) Режим системного управления, который используется достаточно редко. Мы же рассмотрим реальный режим, ввиду отсутствия времени и простоты такового.
4 Немного истории. Реальный режим был самым первым в своей семье x86-ых процессоров. Его особенностями является простота и в то же время отсталость на сегодняшний день. Но даже современные компьютеры после включения сначала находятся в реальном режиме. Это было сделано для того, чтобы не изменять сильно архитектуру процессоров, так как в защищённый режим можно войти только из реального.
5 Описание реального режима. В реальном режиме адресация 16-битная, то есть максимальное пространство RAM, которое можно адресовать – 2^20+(2^16-0x10). Как правило размер адресуемого пространства зависит от количества адресных линий на шине процессора. В нашем примере их 20. Все пространство делится на сегменты, размер которых – 64 кб (=2^16). База сегмента – адрес начала сегмента. Сегменты перекрывают друг друга; так как база каждого сегмента – величина, кратная параграфу (0x10). Отсюда и берёт корни излишек памяти, про который я сказал в начале.
6 Что такое смещение. Так, с сегментами мы разобрались. Теперь зададимся вопросом: а как же получить доступ к памяти внутри сегмента. Смещение (offset) как раз участвует в этом. Смещение обозначает отступ от базы сегмента (см рисунок). Вообще модель памяти в реальном режиме называется сегментированной, и адрес (не физический!) записывается так: Сегмент:Смещение
7 Итак, вот упрощённая модель памяти в реальном режиме.
8 Но сам процессор не пользуется таким представлением памяти. Настоящий, физический адрес рассчитывается так: Physical_address= Segments_Base*10h+Offset. Именно этот адрес процессор выставляет на шину. К примеру: 1000h:0010h = 1001h:0000h; Действительно 1000h*10h+10h=1001h*10h=10010h;
9 Что такое прерывания. Итак, к процессору необходимо каким-то образом взаимодействовать с таймером, клавиатурой и мышью, флопиком, обрабатывать ошибки, случающиеся в программах. Всё это ему помогают делать прерывания. К примеру при тике интервального таймера, нажатии кнопки клавиатуры, попытке обращения к невалидной памяти происходит прерывание, информация о котором идёт на PIC i8259a (Programmable Interrupt Controller). Честно говоря сейчас используется APIC, но при старте машины он запускается в режиме поддержки i8259a. Я не буду из за нехватки времени рассказывать о его программировании и его устройстве (хотя это довольно интересно).
10 Таблица векторов прерываний. Откуда процессор знает где брать обработчики прерываний? Всё дело в таблице векторов прерываний. Она расположена в первом килобайте оперативной памяти, и состоит из 4 байтовых записей: 1-ое слово – смещение обработчика в сегменте. 2-ое слово – базовый адрес сегмента, где находится обработчик прерывания. При возникновении прерывания процессор по номеру прерывания находит его обработчик и передаёт ему управление.
11 Теперь самое интересное – практика. Итак, я предлагаю рассмотреть пример обработки прерываний в реальном режиме. Поступим следующим образом. Давайте рассмотрим демонстрационный пример. Он будет довольно небольшим, но всё равно покажет вам основные приёмы программирования в RM.
12 Как будем реализовывать. Итак, после POST (Power on Self Test) и BIST (Built-In Safe-Test), BIOS в бут- порядке просматривает первые сектора накопителей, для нахождения загрузчика (программы, которая запускает (очень грубо говоря) OC). Как она узнаёт этот загрузчик? По magic_number в конце такового. В нашем случае по 0xAA и 0x55. Потом BIOS грузит этот нужный первый сектор по адресу 0000:7c00h и передаёт ему управление.
13 Предлагаю вам рассмотреть мою демонстрационную программу, написанную на ассемблере FASM и протестировать на VirtualBoxе, дабы не подключать флоповод к компьютеру и не перезагружать его. Она будет обрабатывать прерывания от таймера и клавиатуры. Результат увидите сами. Приступим!
14 Использованная литература. WASM.RU – раздел для дzенствующих. Intel System Programming Guides Flatassembler.net/manuals/ - мануалы по синтаксису FASMa (книг по нему нету).
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.