Приклади невеликих підпрограм на асемблері, assembler, статті, програмування - програмування

Переклад чисел в двійкову форму (у вигляді рядка)

Дана процедура конвертує 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.