ім'я програми формату ASCIZ для блоків з PSP
Розмір блоку - 16 байт.
Для визначення першого блоку ланцюжка можна скористатися недокументованою функцією MSDOS 52h. яка в es: bx повертає list of list. в es: [bx-2] знаходиться сегмент першого MCB блоку.
Обробка подій в MSDOS
В процесі роботи можуть виникати деякі події. Події бувають синхронні і асинхронні. Синхронні події - це ті, які відбуваються в процесі виконання програми завжди в одному і тому ж місці. Асинхронні події - це ті, які відбуваються незалежно від роботи програми. До синхронним подій належать виклики системи DOS, BIOS. До асинхронним подій належать виклики обробників натискань клавіші на клавіатурі, надходження символу по каналу зв'язку і т.п. Асинхронні переривання - це, звичайно, апаратні переривання.
Перші 1024 байти - це таблиця векторів (Interupt Table), яка містить для кожного з 256 векторів двухсловний покажчик на обробник. При виклику відповідного переривання контролер переривань зберігає в стеку регістр прапорів, встановлює заборону переривань з більшим чи рівним номером IRQ (для апаратних переривань) зберігає в стеку CS, IP і передає управління оброблювачу переривань. Оброблювач повинен виконати необхідні дії і повернути управління командою IRET. В деякій літературі помилково написано про необхідність дозволити переривання перед поверненням, - цього робити не слід, тому що після дозволу переривання, перед інструкцією IRET починається обробка наступного переривання стоїть в черзі, і є висока ймовірність отримання повідомлення:
Internal Stack Overflow. System halted.
Можливо два способи обробки подій своїм оброблювачем:- повна заміна обробника;
- вбудовування в ланцюжок обробників переривання.
До повної заміни доводиться вдаватися досить рідко. Зазвичай це використовується для написання обробника "порожніх" векторів. Вбудовування в ланцюжок обробників переривання використовують всі програмні драйвери, яким необхідно отримати управління при виникненні тих чи інших подій.
Вбудовування в ланцюжок обробників переривання відбувається за такою схемою:
Іноді необхідно отримати управління як до старого обробника, так і після нього. Це робиться таким чином:
Команди Pushf і Call Far імітують Int. команди Pushf. Popf. Retf 2 роблять Iret. але повертають отримала програмі прапори, які повернув старий обробник.
Прийоми "красивого вбудовування" з заміною частини команди: