Переклад чисел в двійкову форму (у вигляді рядка)
Дана процедура конвертує 16-бітове слово в рядок ASCIIZ, тобто число 7 перетворюється в рядок 0000000000000111. Лідируючі нулі включаються в рядок. Рядок ASCIIZ - це набір символів, що завершуються 0.
Читання значення лічильника часу
Визначаємо тип процесора
Наступна процедура WhatCPU визначає тип процесора, встановленого в системі. Результат повертається в регістрі AX. Процедура може бути відкомпільована і 16-бітовим компілятором, незважаючи на те, що в ній використовуються 32-бітові інструкції для визначення відмінності між 386, 486 і Pentium.
Наступний фрагмент завантажує набір символів з ROM в RAM і відповідно коригує висоту відображення символів.
Лінійні перетворення в системах з фіксованою точкою
Наступна підпрограма переводить дюйми в міліметри, але також вона може бути використана для будь-яких лінійних перетворень, для чого достатньо змінити коефіцієнт перетворення.
Числа предствалені в 32-бітному форматі з фіксованою точкою. Старше слово містить цілу частину числа, а молодше слово - дробову частину. Передбачається, що використовуються тільки позитивні числа.
Код використовує 32-бітові інструкції, але може бути откомпилирован і 16-бітовим компілятором.
Таблиця розміщення файлів FAT
Перший сектор (з номером 0) диска - це завантажувальний сектор. Його перші байти містять наступну інформацію:
Запуск дочірньої програми
DOS виділяє всю доступну пам'ять поточній програмі, незалежно від того, який обсяг реально необхідний. Тому ви повинні звільнити частину пам'яті для того, щоб завантажити і виконати дочірню програму. Це виконується процедурою Setmem. Кожен параграф займає 16 байт. Простір, необхідне поточній програмі обчислюється як розмір в параграфах = Lseg - Psp + 1
де Lseg - сегмент, розташований після останнього байта програми, а Psp - сегмент, в якому розташований psp програми.
Наступний фрагмент коду запускає програму CHILD.COM з параметром / HELP.
Читання параметрів командного рядка
Наприклад, якщо ваша програма називається KOE.COM і ви запускаєте її, набравши команду
в командному рядку DOS, то процедура ReadCL поверне рядок 4abcs в форматі ASCIIZ.
TSR: завершується і залишаємося в пам'яті
Інсталяція TSR-програми виконується в три етапи:- Завантаження резидентної частини в пам'ять. Перевірка, чи не знаходиться наша програма вже в пам'яті. Збереження необхідної інформації для подальшого видалення резидента з пам'яті. Звільнення пам'яті, зайнятої копією змінних оточення для економії.
- Установка параметрів для роботи резидентної частини. Зазвичай на цьому етапі перехоплюються переривання.
- Завершення настановної програми, при цьому резидентная частина залишається в пам'яті.
Малювання в SVGA
Наступна процедура малює піксель на екрані. Координати пікселя знаходяться в регістрах AX і BX, а в регістрі CX передається колір пікселя. У процедурі передбачається, що розмір "вікна" дорівнює 64 KB, що справедливо, наприклад, для чіпів S3.
Малюємо піксель в графічному режимі
Графічні режими можуть бути розбиті на шість груп залежно від кількості біт, що відводяться кожному пікселю: 1 біт / піксель, 2 кольори, одна бітова площину: CGA mode 6 дозвіл 640 * 200 2 біт / піксель, 4 кольори, одна бітова площину: CGA mode 4 дозвіл 320 * 200 4 біт / піксель, 16 кольорів, чотири бітових площині: EGA mode 0Dh дозвіл 320 * 200 EGA mode 0Eh дозвіл 640 * 200 EGA mode 10h дозвіл 640 * 350 VGA mode 12h дозвіл 640 * 480 VESA mode 102h дозвіл 800 * 600 VESA mode 104h дозвіл 1024 * 768 VESA mode 106h роздільну здатність 1280 * 1024 8 біт / піксель, 256 кольорів, одна бітова площину: VGA mode 13h дозвіл 320 * 200 VESA mode 100h дозволений е 640 * 400 VESA mode 101h дозвіл 640 * 480 VESA mode 103h дозвіл 800 * 600 VESA mode 105h дозвіл 1024 * 768 16 біт / піксель, 65536 кольорів, одна бітова площину (існують також 32768-кольорові режими): VESA mode 111h дозвіл 640 * 480 VESA mode 114h дозвіл 800 * 600 24 біт / піксель, 16777216 кольорів, одна бітова площину: VESA mode 112h дозвіл 640 * 480
Винятками є режими CGA номер 4 і 6, у яких парні і непарні лінії розташовані в різних сегментах пам'яті.
Режими CGA, EGA і VGA підтримуються всіма стандартними BIOS. Перемикання в ці режими зазвичай здійснюється простим викликом функцій BIOS.
У всіх режимах VGA наступна процедура Pixel $ може намалювати піксель. Потрібно відзначити, що процедура досить повільна, тому що використовуються виклики функцій BIOS.
Найцікавіший режим VGA - це режим 13h з можливістю відображення 256 кольорів і дозволом 320 * 200. Номер кольору 0. 255 відповідають значенням в палітрі, де всі кольори представлені у вигляді певних сполучень червоною, зеленою і синьою компонент. Наступна процедура VGApxl $ малює піксель в цьому режимі. Вона працює досить швидко, однак існують ще більш швидкі варіанти.
Функція синуса в 32-бітної системі з фіксованою точкою
Процедура Rsin $ обчислює тригонометричну функцію sin від 32-бітного аргументу. 32-бітна система з фіксованою точкою визначається наступним чином:
Використання процедури:
Вхідні дані: зсув аргументу в BX, зсув результату в AX. Аргумент задає кут в градусах.
Вихідні дані: значення функції sin, що записується в змінну, зміщення якої визначається регістром AX. Значення регістрів не зберігаються.
Наприклад, sin (30.5 °) обчислюється так:
В результаті такого виклику ви отримаєте результат 0.50752 в той час як правильне значени еравно 0.50754
Перевірка готовності накопичувача
Програма перевіряє готовність пристрою. Якщо пристрій не готовий, програма просить натиснути клавішу ESC.