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).

У той же час рядку-приймачу закінчуватися нулем не обов'язково - достатньо лише того, щоб рядок-джерело вміщувався в приймач, тобто приймач повинен мати розмір не менше ніж рядок-джерело.