Нужен пример программы под 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

Объяснение кода листинга программы

  1. Объявление переменных: .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)
  2. Код программы: .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 для завершения работы программы
  3. Использование библиотеки windows.inc, kernel32.inc, user32.inc и advapi32.inc обеспечивает доступ к функциям Windows API.
  4. Включение библиотек user32.lib, kernel32.lib, comctl.lib и gdi.lib обеспечивает связывание с необходимыми DLL.
  5. Значения переменных eax, ebx, ecx, edx, esi, edi и ebp меняются в коде.
  6. Команда PUSHAD сохраняет текущие значения регистра в стеке.
  7. Команда POPAD восстанавливает значения регистра из стека.
  8. Функция wsprintf форматирует строку, используя значения переменных eax, ebx, ecx, edx, esi, edi и ebp.
  9. Функция MessageBox отображает сообщение, используя сформированную строку.
  10. Функция ExitProcess завершает работу программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы