Принципы фон Неймана (дата; соблюдать
порядок принципов) Сформулированы Джоном фон Нейманом в 1945 г.
Принцип двоичного кодирования
Принцип адресуемости памяти
Принцип программного управления
Принцип однородности памяти
Команда С3 – простейшая корректная
программа. Почему?
На стек при входе в программу кладётся 0. Возврат,
таким образом, осуществляется на CS:0 (в PSP), а там лежит команда
int 20h. Это сделано для совместимости с CP/M.
Цикл процессора
выборка инструкции из памяти (при необходимости может
довыбирать байты, если понимает, что инструкция не однобайтная)
выполнение инструкции
Акронимы понятий (добавляйте, если
еще какие были. Если что не так, исправляйте).
BCD – Binary Coded Decimal
RAM, SRAM, DRAM – Random-Access Memory, Static RAM, Dynamic RAM
ROM – Read-Only Memory
VLIW – Very Large Instruction Word
IP – Instruction Pointer
CISC, RISC – Complex Instruction Set Computer, Reduced Instruction
Set Computer
SIMD, SSE – Single Instruction – Multiple Data, Streaming SIMD
Extensions
NMI – Non-Maskable Interrupt
PIC – Programmable Interrupt Controller(В Гуке написано Peripheral
Interrupt Controller)
DMA – Direct Memory Access
PC XT, PC AT – PC Extended Technology, PC Advanced Technology,
IRQ – Interrupt Request
TSR – Terminate-and-Stay Resident
POST – Power-On-Self-Test
BIOS – Basic Input-Output System
CMOS – Complementary Metal-Oxide Semiconductor
RTC – Real-Time Clock
ISA, EISA – Industry Standard Architecture, Extended ISA
PCI – Peripheral Component Interconnect
AGP – Accelerated Graphics Port
VLB – Vesa Local Bus
MCA – Microchannel Architecture
FSB – Front Side Bus
LPC – Low Pin Count
ATA, ATAPI, SATA – AT Attachment, ATA Packet Interface, Serial ATA
IDE – Integrated Drive Electronics
SCSI – Small-Computer System Interconnection
SLED – Single Large Expensive Drive
RAID – Redundant Array of Inexpensive Drives
CHS – Cylinder / Head / Sector? [схема CHS (механизм доступа BIOS
к интерфейсу дисков IDE емкостью до 528 Мб) (c) Lingvo]
FCAL – Fibre Channel Arbitrated Loop
LBA – Logical Block Addressing
USB – Universal Serial Bus
Зачем процессор при прерывании
самостоятельно делает CLI флага IF?
Чтобы у обработчика был шанс обработать сигналы
прерываний именно в том порядке, в каком они поступают. Если бы CLI
перед обработчиком вообще не было – до обработки первого прерывания
могло бы произойти второе такое же и оно бы обработалось сначала. Если
бы CLI было записано первой инструкцией в обработчике, то второе
прерывание все равно могло бы произойти – между срабатыванием первого
прерывания и исполнением первой инструкции обработчика.
Действия процессора при прерывании.
сохраняет флаги в стеке
CLI
сохраняет адрес следующей инструкции в стеке
переходит на адрес, записанный в таблице векторов в месте,
соответствующем номеру прерывания
Почему в iret не встроили sti вместо
восстановления флагов (и сохранения их вначале)
Нельзя всегда после работы прерывания устанавливать
флаг IF в 1, так как он мог быть равен 0 до срабатывания прерывания
и нужно его вернуть к исходному виду, что и достигается сохранением
и восстановлением флагов.
Как запретить NMI? Через порт 70h. Чтобы запретить NMI, надо вывести
(out) в этот порт значение со старшим (7-м) битом = 1,
чтобы разрешить = 0. out 70h,2Dh ;enable NMI – 2Dh is a reserved addr in the CMOS
Memory out 70h,0ADh ;disable NMI
Почему нельзя для Break Point использовать
2-хбайтовые команды (СD03)
Потому что тогда мы бы испортили байт, следующий
за тем, на который ставится брейкпойнт(в случае, если бы брейкпойнт
был поставлен на 1-байтовую команду). А там могли быть, во-первых,
данные, используемые кодом до брейкпойнта, а во-вторых, код, на который
может перейти программа опять же до брейкпойнта.
Что будет, если прочитать из «пустоты»?(
адреса между C8000 – конец video Bios и F0000 – начало Bios)
Видимо, нужно читать из области C8000 – DFFFF,
пустым местом считается то, где нету дополнительных ROM BIOS. Если
смотреть pepores-ом, там иногда встречаются ROM BIOS, иногда встречаются
куски каких-то данных, но по большей части сплошные 00. Может это оно
и есть? (Добавлю, а точнее процитирую Гука: «...а также ищутся модули карт
расширения ROM BIOS (в зоне C8000-F4000h)". Так что по сути
там осмысленная инфа)
Сколько существует сегментных вариантов
записи адреса FFFF0?
Минимальное значение сегмента при записи этого
адреса – F000h, максимальное – FFFFh. Получаем FFFFh-F000h+1=1000h=4096
способов.
Что записать в CS:IP, чтобы началась
перезагрузка?
FFFF:0
BIOS проецируется в память с определенным
шагом. Узнать его. Какую сигнатуру смотрит? Узнать адрес до указателя
точки входа.
POST инициализирует Video BIOS по адресу С0000,
а остальные BIOS-ы устройств ищет в диапазоне C8000 – DFFFF с шагом 2
Кб. ROM BIOS должен иметь специальный заголовок, выровненный по границе
шага поиска. Структура заголовка:
Смещение
Длина
Назначение
0
2
Сигнатура, младший байт – 55h, старший байт – AAh
2
1
Длина, указанная в блоках
по 512 байт
3
3
Точка входа в процедуру
инициализации, заканчивающуюся far ret. Обычно здесь трехбайтная
инструкция jmp на начало процедуры
В случае обнаружения корректного заголовка POST с помощью far call
вызывает процедуру инициализации, начинающуюся со смещения 3 заголовка
модуля. Непонятно, что на самом деле в диапазоне E0000 – EFFFF и ищет
ли там POST BIOS-ы. Кто найдет достоверную информацию, пишите сюда.
Как реально убедиться, что нельзя записать
в память ROM? (необходимо 3 команды)
push 0FFFFh pop es mov es:[0000],0
Смотрим в отладчике и видим, что содержимое памяти не меняется.
Размер буфера клавиатуры. Где он находится
в памяти. Зачем нужны два указателя?
Размер буфера – 32 байта, каждая кнопка занимает 2
байта (ASCII-код и скан-код). Расположен по адресу 0000:041E.
Представляет из себя циклическую очередь, поэтому нужны указатели
на начало и на конец очереди (0000:041A и 0000:041C соответственно).
Какие флаги о статусе клавиатуры хранятся
в памяти BIOS (2 байта)?
Флаги Shift Status и Extended Shift Status – байты
по адресам 0000:0417 и 0000:0418 соответственно. Хранят информацию
о том, нажаты ли в текущий момент кнопки Shift, Alt, Ctrl и т. д. 16
бит – 16 флагов.
Какой номер у прерывания загрузчика? int 19h – Bootstrap Loader Service. Загрузчик,
которым пользуется BIOS во время загрузки компьютера для загрузки ОС.
Когда вместо MAMA будет выводиться AMAM?
Если разместить вывод после отбоя PIC.
Это происходит из-за того, что после отбоя и до вывода может случиться
то же самое прерывание со следующим символом и он выведется раньше.
Что может потребовать устройство?
Память
Порты ввода-вывода
IRQ
Канал DMA
Тест
для проверки, что до отбоя PIC у нас тикает таймер. (написать прогу)
Лень писать, я верю что тикает и знаю как написать.
:)
Есть следующие схемы работы с устройством
через порты – A (каждому регистру устройства соответствует порт
для чтения и записи), B (есть индексный порт и порт, по которому
производится обмен данными с тем регистром, индекс которого задается
при записи в индексный порт), С (есть всего один порт, в него сначала
пишется индекс нужного регистра, затем через него же работают с этим
регистром). Какой еще способ есть? Приведите примеры. По схеме A работает большинство устройств:
клавиатура, COM и LPT, контроллер DMA. По схеме B работают контроллеры
шин ISA и PCI. Схема C реализована в регистре контроллера атрибутов VGA.
Выдуманный тип: регистры данных разбиваются на страницы, причём одна
страница отображается на порты. Выбор того, какая именно страница
отображается на порты, осуществляется индексным портом. (Вроде бы что-то
похожее есть в SVGA, если не вру.)
Что круче: адаптер или контроллер?
Контроллер. Адаптер – это средство сопряжения
устройства с шиной или интерфейсом компьютера. Контроллер служит
тем же целям, но при этом подразумевается его способность
к самостоятельным действиям после получения команд от обслуживающей
его программы. Если приводить аналогию, адаптер – это переходник
с евророзетки на советскую (простая пластмассовая хрень), а контроллер –
что-то вроде переходника с 220В на 5В :)
Почему сейчас идет переход
на последовательные соединения?
В параллельных соединениях сигнал одновременно идет
по куче проводов. При это синхронно отправляется n сигналов, где n –
количество проводов в пучке. Принять их тоже нужно синхронно,
но некоторые сигналы идут быстрее, некоторые медленнее... Проблема
синхронизации не позволяет достичь высоких скоростей.
При последовательной передаче за счет отсутствия этого недостатка
скорость можно разогнать на порядки.
Какой код команды INT?
CDXX где XX номер инта. Брэйкпоинт имеет
однобайтный код СС.
Как ещё кроме команд инт и брэйкпоинт можно
войти в обработчик прерывания?
pushf call obrab
Но вроде как Баклановский ждал не этого ответа.. Есть варианты?
Ага, есть : pushf push CS ; должно лежать глубже IP. Предыдущему редактору низачот. ; push IP — не бывает такой команды call near ptr $+3 ;— IP кладут в стек именно так jmp obrab
Как дать отбой второму PIC-у
out A0h,20h
Материал взят с Математико-механического факультета, г. Екатеринбург