говорить про необхідність виравніваніяcx, cx; cx = 0 - тут буде зберігатися число додаються біт для вирівнювання
; будемо виконувати поділ, дивитися залишок: bl; ділимо на 32 ширину ізображеніяah, 0; якщо залишок дорівнює нулю, то _ExitCycle; _ виходимо з ціклаcx; якщо залишок ненульовий, то додаємо 1 біт для вирівнювання та знову делімax, word ptr [biWidth]; в ax - первісна ширина ізображеніяax, cx; тепер в ax - розширений додатковими бітами розмір рядка ізображеніяCalcCycle; знову ділимо, поки не доповнимо рядок до кратності 4: IgnoredBits, cl; збережемо кількість бітів, що доповнюють рядок до параграфа
; відновимо всі регістриbxdxcxaxendp
; Процедура для парсингу рядка параметрів
; Вхід: es посилається на префіксний сегмент (PSP)
; Вихід: dh містить кол-во символів у імені файлу, зчитуваного (імені) з параметрів командного рядка
; Також впливає на глобальну змінну I_Option, встановлює її в 0 або 1, залежно від того, чи встановлена ​​опція/Iprocbx, 80h; в bx - зміщення рядка параметрів програми щодо префіксного сегментаdx, dx; dx = 0dl, es: [bx]; в dl - кол-во лічених символів з командного строкіbxdl, dl; якщо параметрів немає, то _SkipParsing; _ парсити нечегоdi, fname; в di зміщення на рядок, яка буде зберігати ім'я файлаcx, cx; cx = 0cl, dl; в рахунок циклу (cx) поміщаємо кол-во символів у рядку параметровdi, 2; зроблено для сумісності формату рядка при введенні імені файлу через параметри і при введенні з клавіатури: al, es: [bx]; в al пересилаємо поточний символ з рядка параметрів у PSPal,''; якщо отриманий символ - пробіл, _NextSymbol; _ то ігноруємо його і переходимо до следующемуal, '/'; якщо символ - коса риса, що позначає використання опції, _UseOption; _ то переходимо на мітку обробки опції [di], al; якщо звичайний символ - просто переписуємо його в fnamedi; на наступну позицію в fname! dh; збільшуємо лічильник записаних сімволовNextSymbol; перехід до наступного символу: cx; оскільки будемо аналізувати слід. символ, то зменшимо счетчікEndCopy; якщо коса риса була останньою в рядку, то завершуємо роботу з рядком, опція - ігноріруетсяbx; переходимо до слід. сімволуal, es: [bx]; пересилаємо його в alal, 'I'; якщо це не ключ нашої опції ігнорування, а щось інше _NextSymbol; _ то просто переходимо до слід. сімволуI_Option, 1; якщо/I, то включаємо опцію: bx; Перехід до слід. сімволуCopySymbols: [di], 0; рядок завершуємо нулем, щоб DOS міг нормально її вважати при відкритті файлу: endpstart
4. Результат роботи програми
В
Малюнок 1. при запуску програми необхідно ввести директорію файлу *. bmp
В
Малюнок 2. Після введення правильної директорії файлу програма малює зображення