Add esp, n
Ця команда звільняєNбайт стека.
Ця функція призначена для отримання інформації про клавіатуру та мишу в консольному режимі.
Параметри цієї функції:
дескриптор вхідного буфера консолі
покажчик на структуру (або масив структур), де міститься інформація про події, що відбулися з консоллю.
кількість одержуваних інформаційних записів (структур).
покажчик подвійне слово, що містить кількість реально отриманих записів.
Ця функція використовується для отримання консолі дескриптора. Її аргументом може бути одна з наступних констант:
STD_INPUT_HANDLE equ -10; для введення STD_OUTPUT_HANDLE equ -11; для виведення STD_ERROR_HANDLE equ -12; для повідомлення про помилку
Для виведення текстової інформації використовується функція API WriteConsoleA, параметри якої (зліва направо) мають такий зміст.
1-й параметр - дескриптор буфера виведення консолі, який можна отримати за допомогою функції GetStdHandle.
2-й параметр - покажчик на буфер, де знаходиться текст, що виводиться.
3-й параметр - кількість символів, що виводяться.
4-й параметр - вказує на змінну DWORD, куди буде розміщено кількість дійсно виведених символів.
5-й параметр - резервний параметр, повинен дорівнювати нулю.
Буфер, де знаходиться текст, що виводиться, не обов'язково повинен закінчуватися нулем, оскільки для цієї функції вказується кількість символів, що виводяться.
SetConsoleCursorPosition
Встановити позицію курсору в консолі можна за допомогою функції SetConsoleCursorPosition із такими параметрами:
1-й дескриптор вхідного буфера консолі.
2-й, структура COORD:
SetConsoleTitle
FreeConsole
Ця функціяпримусово звільняє консоль.
Слід зазначити, що один процес може мати лише одну консоль, тому виконання на початку програми FreeConsole є обов'язковим. При запуску програми в "чужій" консолі вона успадковує цю консоль, тому поки ми не виконаємо функцію FreeConsole, нової консолі не створити - чужої консолі ця функція закрити не може.
AllocConsole
Для створення консолі програма викликає API-функцію WindowsAllocConsole:
Function AllocConsole Lib "kernel32" Alias DWORD "AllocConsole" (). З опису цієї функції видно, що вона міститься в бібліотеці Windowskernel32, тому до розділу директив нашої асемблерної програми ми повинні включити відповідні файли прототипів (kernel32.inc) і бібліотек (kernel32.lib). Після виконання функціяAllocConsoleзаписує (повертає) в регістрEAXзначення довжиною 4 байти (DWORD). Якщо консоль створити не вдалося, у регістрEAXбуде записано нуль.
CharToOemA
Windows (українська) використовує кодування Win1251, консоль - DOS. Оскільки асемблерну програму ми набираємо все ж таки під Windows, що визначаються в ній символьні рядки на кирилиці в пам'ять комп'ютера потраплять у кодуванні Win1251 і в консолі виглядатимуть нечитано. API-функція WindowsCharToOemпризначена для перекладу кодування рядка Win1251 в DOS, її зручно використовувати при організації виведення консоль кириличних символів.
На відміну від кирилиці, числові значення, які можна порівняти з цифрами та латинськими символами, однакові в обох кодуваннях, тому, якщо в консоль виводиться лише латиниця та числа, функціюCharToOemвикористовувати не потрібно.
Функція визначається так:Function CharToOem Lib "user32" Alias DWORD "CharToOemA"(DWORD lpszSrc, DWORD lpszDst).
У той же час рядку-приймачу закінчуватися нулем не обов'язково - достатньо лише того, щоб рядок-джерело вміщувався в приймач, тобто приймач повинен мати розмір не менше ніж рядок-джерело.