Нужен пример программы под windows с использованием команды PUSHAD - Assembler
Формулировка задачи:
прошу, умоляю, напишите кто нибудь хоть ОДИН нормальный пример программы под windows с использованием команды PUSHAD всю голову сломал и так и не понял, как его всунуть в исходник...((( в гугле нифига не нашел, одна только теория
Решение задачи: «Нужен пример программы под windows с использованием команды PUSHAD»
textual
Листинг программы
.386 .model flat,stdcall option casemap:none include C:\masm32\include\windows.inc include C:\masm32\include\kernel32.inc include C:\masm32\include\user32.inc include C:\masm32\include\advapi32.inc includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\kernel32.lib includelib C:\masm32\lib\comctl.lib includelib C:\masm32\lib\gdi.lib includelib C:\masm32\lib\advapi32.lib .data mes db "eax=%d ebx=%d ecx=%d edx=%d esi=%d edi=%d ebp=%d",0 titl db "Info",0 buf db 256 dup(0) .code start: mov eax,1 mov ebx,2 mov ecx,3 mov edx,4 mov esi,5 mov edi,6 mov ebp,7 pushad mov eax,6 mov ebx,8 mov ecx,3 mov edx,6 mov esi,9 mov edi,0 mov ebp,1 popad invoke wsprintf,addr buf,addr mes,eax,ebx,ecx,edx,esi,edi,ebp invoke MessageBox,0,addr buf,addr titl,0 invoke ExitProcess,0 end start
Объяснение кода листинга программы
- Объявление переменных:
.data
mes db
eax=%d ebx=%d ecx=%d edx=%d esi=%d edi=%d ebp=%d
,0 titl dbInfo
,0 buf db 256 dup(0) - Код программы: .code start: mov eax,1 ; Значение переменной eax устанавливается в 1 mov ebx,2 ; Значение переменной ebx устанавливается в 2 mov ecx,3 ; Значение переменной ecx устанавливается в 3 mov edx,4 ; Значение переменной edx устанавливается в 4 mov esi,5 ; Значение переменной esi устанавливается в 5 mov edi,6 ; Значение переменной edi устанавливается в 6 mov ebp,7 ; Значение переменной ebp устанавливается в 7 pushad ; Команда PUSHAD сохраняет значения регистров в стеке mov eax,6 ; Значение переменной eax устанавливается в 6 mov ebx,8 ; Значение переменной ebx устанавливается в 8 mov ecx,3 ; Значение переменной ecx устанавливается в 3 mov edx,6 ; Значение переменной edx устанавливается в 6 mov esi,9 ; Значение переменной esi устанавливается в 9 mov edi,0 ; Значение переменной edi устанавливается в 0 mov ebp,1 ; Значение переменной ebp устанавливается в 1 popad ; Команда POPAD восстанавливает значения регистров из стека invoke wsprintf,addr buf,addr mes,eax,ebx,ecx,edx,esi,edi,ebp ; Функция wsprintf форматирует строку invoke MessageBox,0,addr buf,addr titl,0 ; Вызывается функция MessageBox для отображения сообщения invoke ExitProcess,0 ; Вызывается функция ExitProcess для завершения работы программы
- Использование библиотеки
windows.inc
,kernel32.inc
,user32.inc
иadvapi32.inc
обеспечивает доступ к функциям Windows API. - Включение библиотек
user32.lib
,kernel32.lib
,comctl.lib
иgdi.lib
обеспечивает связывание с необходимыми DLL. - Значения переменных eax, ebx, ecx, edx, esi, edi и ebp меняются в коде.
- Команда PUSHAD сохраняет текущие значения регистра в стеке.
- Команда POPAD восстанавливает значения регистра из стека.
- Функция wsprintf форматирует строку, используя значения переменных eax, ebx, ecx, edx, esi, edi и ebp.
- Функция MessageBox отображает сообщение, используя сформированную строку.
- Функция ExitProcess завершает работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д