Вывод через wsprintf - Assembler
Формулировка задачи:
Компилятор не ругается, но ехе не открывается. Подскажите в чём проблема. Компилятор MASM
.386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data int_one DD 0 int_two DD 0 str_format DB"int_one = %d , int_two = %d",0 str_buffer DB 256 dup (0) mb_title db "Title Text Message",0 mb_text db "This Text is Message",0 .code start: mov int_one, 150 mov int_two, 100 invoke wsprintf,0,addr str_buffer, addr str_format,int_one, int_two invoke MessageBox,0,addr str_buffer,offset mb_title,MB_OK invoke ExitProcess,0 end start
Решение задачи: «Вывод через wsprintf»
textual
Листинг программы
.386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data int_one DD 0 int_two DD 0 str_format DB "int_one = %d , int_two = %d",0 str_buffer DB 256 dup (0) mb_title db "Title Text Message",0 mb_text db "This Text is Message",0 .code start: mov [int_one], 150 mov [int_two], 100 invoke wsprintf,ADDR str_buffer, ADDR str_format,[int_one], [int_two] invoke MessageBox,0,ADDR str_buffer, ADDR mb_title,MB_OK invoke ExitProcess,0 end start
Объяснение кода листинга программы
- .386 - Это директива, указывающая, что программа будет использовать 32-битный код.
- .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.
- includelib \masm32\lib\user32.lib - Эта команда включает в программу библиотеку User32.
- includelib \masm32\lib\kernel32.lib - Эта команда включает в программу библиотеку Kernel32.
- .data - Эта директива определяет область данных программы.
- int_one DD 0 - Эта команда определяет переменную типа DWORD (32-битное целое число) с именем
int_one
и значением 0. - int_two DD 0 - Эта команда определяет переменную типа DWORD (32-битное целое число) с именем
int_two
и значением 0. - str_format DB
int_one = %d , int_two = %d
,0 - Эта команда определяет строку формата с именемstr_format
, которая содержит местозаполнители для замены значений переменныхint_one
иint_two
. - str_buffer DB 256 dup (0) - Эта команда определяет буфер строки с именем
str_buffer
, который может вместить до 256 символов. - mb_title DB
Title Text Message
,0 - Эта команда определяет строку с именемmb_title
, которая содержит текст сообщенияTitle Text Message
. - mb_text DB
This Text is Message
,0 - Эта команда определяет строку с именемmb_text
, которая содержит текст сообщенияThis Text is Message
. - .code - Эта директива определяет область кода программы.
- start: - Эта метка определяет начало функции main.
- mov [int_one], 150 - Эта команда устанавливает значение переменной
int_one
равным 150. - mov [int_two], 100 - Эта команда устанавливает значение переменной
int_two
равным 100. - invoke wsprintf, ADDR str_buffer, ADDR str_format, [int_one], [int_two] - Эта команда вызывает функцию wsprintf, передавая ей адрес буфера строки
str_buffer
, адрес строки форматаstr_format
, а также значения переменныхint_one
иint_two
. - invoke MessageBox,0, ADDR str_buffer, ADDR mb_title, MB_OK - Эта команда вызывает функцию MessageBox, передавая ей дескриптор родительского окна (0), адрес буфера строки
str_buffer
, дескриптор строки заголовкаmb_title
и тип кнопки сообщения (MB_OK). - invoke ExitProcess,0 - Эта команда вызывает функцию ExitProcess, передавая ей код завершения процесса (0).
- end start - Эта метка определяет конец функции main.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д