Вывод таблицы ASCII. win32 - Assembler/MASM
Формулировка задачи:
Помогите найти(сделать) программу на масм32 для вывода символов ASCII. Облазил весь инет, иностранные форумы в т.ч., всюду версии лишь х16. Ничего рабочего на win32, будто бы вообще никто, кроме меня не интересовался подобным.
Заранее спасибо
Решение задачи: «Вывод таблицы ASCII. win32»
textual
Листинг программы
.486 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib .data aszCrLf db 0Dh, 0Ah, 0 aszPressLeftAlt db 0Dh, 0Ah, 0Dh, 0Ah, "Press Left Alt to exit", 0 .data? hConsoleOutput HANDLE ? hConsoleInput HANDLE ? BufLen dd ? Buffer db 1024 dup(?) .code start proc ; получение описателей ввода и вывода консоли invoke GetStdHandle, STD_INPUT_HANDLE mov hConsoleInput, eax invoke GetStdHandle, STD_OUTPUT_HANDLE mov hConsoleOutput, eax ;очистка экрана invoke ClearScreen ;заполнение строки mov ch, 10h mov eax, 03020100h mov bx, 0A0Dh lea edi, [Buffer] @@forI: mov cl, 04h @@forJ: stosd add eax, 04040404h dec cl jnz @@forJ mov [edi], bx add edi, 2 dec ch jnz @@forI sub edi, offset Buffer mov [BufLen], edi ; invoke WriteConsole, hConsoleOutput, ADDR Buffer,\ BufLen, ADDR BufLen, NULL ;ожидание нажатия Left Alt invoke WriteConsole, hConsoleOutput, ADDR aszPressLeftAlt,\ LENGTHOF aszPressLeftAlt - 1, ADDR BufLen, NULL @@WaitForLAlt: invoke GetAsyncKeyState, VK_LMENU and eax, 8000h jz @@WaitForLAlt ;завершение программы invoke ExitProcess, 0 start endp end start
Объяснение кода листинга программы
- .486 - это директива компилятора, которая указывает, что код написан для процессора 80486.
- .model flat, stdcall - это директива компилятора, которая определяет модель памяти и стиль вызова функций.
- option casemap :none - это директива компилятора, которая отключает преобразование регистра символов.
- include \masm32\include\windows.inc - это директива компилятора, которая включает в код библиотеку Windows API.
- include \masm32\include\user32.inc - это директива компилятора, которая включает в код библиотеку User32 API.
- include \masm32\include\kernel32.inc - это директива компилятора, которая включает в код библиотеку Kernel32 API.
- include \masm32\include\masm32.inc - это директива компилятора, которая включает в код библиотеку MASM32 API.
- includelib \masm32\lib\user32.lib - это директива компилятора, которая включает в код библиотеку User32.
- includelib \masm32\lib\kernel32.lib - это директива компилятора, которая включает в код библиотеку Kernel32.
- includelib \masm32\lib\masm32.lib - это директива компилятора, которая включает в код библиотеку MASM32.
- hConsoleOutput HANDLE ? - это переменная, которая содержит дескриптор вывода консоли.
- hConsoleInput HANDLE ? - это переменная, которая содержит дескриптор ввода консоли.
- BufLen dd ? - это переменная, которая содержит длину буфера.
- Buffer db 1024 dup(?) - это переменная, которая содержит буфер.
- ch db 10h - это переменная, которая содержит символ, который будет выводиться.
- eax dd 03020100h - это переменная, которая содержит значение, которое будет выводиться в регистре EAX.
- bx db 0A0Dh - это переменная, которая содержит значение, которое будет выводиться в регистре BX.
- edi dd ? - это переменная, которая используется в качестве индекса для буфера.
- aszCrLf db 0Dh, 0Ah, 0 - это строка, которая содержит символ CR, символ LF и символ NUL.
- aszPressLeftAlt db 0Dh, 0Ah, 0Dh, 0Ah,
Press Left Alt to exit
, 0 - это строка, которая содержит сообщениеPress Left Alt to exit
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д