Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124

Вывод нескольких символьных переменных в MessageBox

04.05.2018, 16:39. Показов 2279. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Жаль, что не могу отозваться в адрес самого языка. Ну да ладно, всем стоит быть толерантными.
Необходимо вывести ФИО в окно сообщений. Как правильно это сделать?
Вот к чему я пока пришел:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
.486                                
.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                                   
MsgBoxTitle db "MessageBox", 0
MsgBoxText  db 128 dup(?),0 
 
Fam db "Second_Name",0
Imya db "Name",0
Otch db "Otchestvo",0
 
format1 db "Фамилия: ", 0dh,0ah,                    ; возможно, между текстом и переносом что-то должно стоять
"Имя: ", 0dh,0ah,                        ;   "Имя: ", Imya, 0dh,0ah,      - выдает ошибку
"Отчество: ",0dh,0ah, 0     
    
.code                                   
start:
 
invoke wsprintf,
ADDR MsgBoxText,                            
ADDR format1,                       
Fam, Imya, Otch            ; переменные указал , как по примеру
invoke MessageBox, 0,           ; если сначала MassageBox, а потом wsprintf  - будет пустое окно (только MsgBoxText)  
ADDR MsgBoxText,                        
ADDR MsgBoxTitle,                       
MB_OK 
                                
invoke ExitProcess, 0   
end start
Вот какой пример у меня есть:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
...
.data                                       
MsgBoxTitle db "Заголовок MessageBox", 0                                           
MsgBoxText  db 128 dup(?),0                 
x SBYTE 40h                                 
y SBYTE 5h                                      
format1 db "Значение Х=",                  
"%d ",0dh,0ah,                              
"Значение Y=","%d ",                        
0dh,0ah,                                    
"Разность R=X-Y=","%d ",                    
0dh,0ah, 0
.code
invoke MessageBox, 0,           
ADDR MsgBoxText,                        
ADDR MsgBoxTitle,                           
MB_OK                               
MOV CL, x                           
MOV BL, y                           
MOV AL, CL                      
SUB AL,BL                                   
invoke wsprintf,                            
ADDR MsgBoxText,                            
ADDR format1,                               
x, y, AL    
invoke ExitProcess, 0                       
end start
С цифрами все ясно - там система счисления указывается. А как с символьными переменными быть? Какой-нибудь "%char" был бы очень кстати.

Использую MASM32.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2018, 16:39
Ответы с готовыми решениями:

Вывод кавычек из символьных переменных
Нужно оперировать одинарными кавычками для подготовки автотекста с wiki-разметкой. Три одинарных кавычки нужно считать из компонента...

Вывод int переменных в MessageBox
поиогите пожалуйста с выводом int переменных в massegeBox(" "); дайте пожалуйста рабочий class который решает эту задачу, вот ниже...

Вывод нескольких переменных
Всем привет. сделан код nero :: ( , Integer ) -> ( , Integer ) -> ( , Integer ) -> nero (a1, b1) (a2, b2) (a3, b3) = if ((b1...

8
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6208 / 2442 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
04.05.2018, 17:59
Цитата Сообщение от TheDmytrius Посмотреть сообщение
"Имя: ", Imya, 0dh,0ah, - выдает ошибку
текстовые строки должны быть в кавычках, числа - нет.
"Имя: Imya", 0dh,0ah,
0
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
04.05.2018, 19:12  [ТС]
Цитата Сообщение от R71MT Посмотреть сообщение
текстовые строки должны быть в кавычках, числа - нет.
"Имя: Imya", 0dh,0ah,
То есть, мне нужно просто прописать нужный текст и никаких переменных не создавать? У меня ведь значение переменной Imya - это "Name". А выводит Имя: Imya
Задание просто такое: переменные вывести.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6208 / 2442 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
04.05.2018, 19:29
тогда строки нужно склеивать, и wsprintf здесь не нужен.
всё барахло копируй в переменную "MsgBoxText" и выводи одним махом в окно
1
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
04.05.2018, 19:33  [ТС]
Ясно, буду искать другие пути. Спасибо за отклик!
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6208 / 2442 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
04.05.2018, 20:09
Цитата Сообщение от TheDmytrius Посмотреть сообщение
буду искать другие пути
задание не стандартное..
обычно в переменные вводят с клавы (ФИО), тогда просто указываешь входной буфер с отступом от переменной (у меня 16-байт). А здесь переменная уже содержит значение, поэтому его нужно сбрасывать в буфер в ручную.
Вот пример для твоего случая (+10 это отступ):
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
;fasm-code
;-----------
format PE GUI 4.0
include 'win32ax.inc'
include 'encoding\win1251.inc'
 
.code
start: mov     ecx,len
       push    ecx ecx
       mov     edi,m0+10
       mov     esi,Fam
       rep     movsb
 
       pop     ecx
       mov     edi,m1+10
       mov     esi,Imya
       rep     movsb
 
       pop     ecx
       mov     edi,m2+10
       mov     esi,Otch
       rep     movsb
 
       invoke  MessageBox,0,m0,Title,MB_OK
       invoke  ExitProcess,0
.end start
;---------------------------
.data
Title   db  "Список",0
m0      db  13,10,'Фам: ', 16 dup(' ')
m1      db  13,10,'Имя: ', 16 dup(' ')
m2      db  13,10,'Отч: ', 16 dup(' '),0
 
Fam     db  "Иванов   "
Imya    db  "Пётр     "
Otch    db  "Сидорович"
len     =   $ - Otch
Изображения
 
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.05.2018, 20:15
В MSDN о wsprintf утверждается о наличие ключа %s для вывода строки.
1
21 / 21 / 20
Регистрация: 05.12.2017
Сообщений: 124
04.05.2018, 21:15  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
В MSDN о wsprintf утверждается о наличие ключа %s для вывода строки.
Ого, спасибо за рэсёрч! К сожалению, этот способ не работает либо я его неправильно применяю.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.05.2018, 22:48
Формирование новой строки в Buffer, и вывод её в консоль
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
.686
.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
        aszString1      db      'STRING111', 0
        aszString2      db      'STRING222', 0
        aszResult       db      'String: %hs', 0Dh, 0Ah, 'Another string: %hs', 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
        ;преобразование кодировки символов кириллицы
        invoke  CharToOem,      ADDR aszString1, ADDR aszString1
        invoke  CharToOem,      ADDR aszString2, ADDR aszString2
        invoke  CharToOem,      ADDR aszResult, ADDR aszResult
 
        ;вывод результатов
        invoke  wsprintf, ADDR Buffer, ADDR aszResult, \
                        ADDR aszString1, ADDR aszString2
        mov     [BufLen],       eax
        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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2018, 22:48
Помогаю со студенческими работами здесь

Вывод значений нескольких переменных
Добрый день. Подскажите, пожалуйста, как мне вывести с этого простенького цикла не только значение k, но и сгенерированное значение...

Вывод нескольких переменных в консоль
Допустим, имеются две переменные a = 5, и b = 2. Нужно вывести обе переменные в консоль. Вопрос состоит в том, как это сделать одной...

Вывод нескольких переменных в текстовом поле
function showh() { var theDate = new Date(); var theHours = theDate.getHours(); var theMinutes = theDate.getMinutes(); ...

Вывод нескольких разнотипных переменных в Tmemo и в файл
Здравствуйте. У меня вопрос от новичка. У меня есть несколько переменных разного типа. Необходимо вывести их в Tmemo(файл) в одну строчку и...

Сложение символьных переменных
Подскажите как можно сложить\преобразовать в строку и сложить переменные типа Char. Суть проста, надо написать программу которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru