0 / 0 / 0
Регистрация: 07.10.2017
Сообщений: 9
1
MASM

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

26.03.2020, 12:13. Показов 2018. Ответов 2
Метки нет (Все метки)

Добрый день! Написал небольшую программу, которая 5 раз с разными значениями переменных обсчитывает математический пример, в итоге получается 5 элементов:
Assembler
1
2
3
4
5
result[0]
result[4]
result[8]
result[12]
result[16]
которые нужно вывести построчно на экран. Перед выводом элемент переводится в строку. Но больше одного из них у меня не получается вывести, перечитал и переискал много всего. Буду рад конкретному примеру, если возможно. Советовали на мой вопрос использовать wsprintf, но с ним тоже у меня другого результата кроме того, что уже есть, не получилось
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
.386
.model flat,stdcall
option casemap:none
 
include \masm32\include\masm32rt.inc
 
.data
titletext db 'Лаб 5', 0
AnswerTxt db 'The answer is '
AnswerNum db 11 dup(0)
num_a dd 5,-5,-25,25,-5
num_b dd 5,32,3,-5,6
num_c dd 10,2,8,12,4
bracket dd ?
result dd ?,?,?,?,?
 
.code
start:
    mov esi, 5
    mov edi, 0
    .Repeat
        mov eax, -25
        mov ebx, num_a[edi]
        cdq
        idiv ebx
        add eax, num_c[edi]
        mov bracket, eax
        mov eax, num_b[edi]
        mov ebx, num_a[edi]
        cdq
        imul ebx
        sub bracket, eax
        mov eax, num_c[edi]
        mov ebx, num_b[edi]
        cdq
        imul ebx
        mov ebx, 2
        cdq
        idiv ebx
        add eax, 1
        mov ebx, bracket
        cdq
        imul ebx
        mov result[edi], eax
 
        mov ebx, 2
        cdq
        idiv ebx
 
        .IF edx == 0
            mov eax, result[edi]
            mov ebx, 2
            cdq
            idiv ebx
        .ELSE
            mov eax, result[edi]
            mov ebx, 5
            cdq
            imul ebx
        .ENDIF
 
        mov result[edi], eax
        add edi, 4
        dec esi
        .Until Zero?
 
        push offset AnswerNum
        push result[12]
        call dwtoa
        push 0
        push offset titletext
        push offset AnswerTxt
        push 0
        call MessageBox
        call ExitProcess
end start
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2020, 12:13
Ответы с готовыми решениями:

как 3 стринговых переменных вывести на разных строках?
.... writeln(a); writeln(b); writeln(c); // a,b,c - строки

Вывести значения двух переменных в MessageBox
Как вывести 2 переменные в MessageBox? TCHAR buf = {0}; _stprintf(buf, TEXT("%d"),...

Метод, возвращающий несколько переменных разных типов
Возможно ли сделать так чтобы метод вернул мне и bool и string и int например? Как это сделать и...

Несколько переменных с разных массивов в одном блоке разметки html
Сделал так: <?php $auto = ; $marka = ; foreach($auto as $line) { foreach($marka as...

2
Эксперт Hardware
Эксперт Hardware
5406 / 1947 / 357
Регистрация: 29.07.2014
Сообщений: 2,863
Записей в блоге: 4
26.03.2020, 15:37 2
Лучший ответ Сообщение было отмечено Bugogo как решение

Решение

Цитата Сообщение от Bugogo Посмотреть сообщение
Советовали на мой вопрос использовать wsprintf
этой функции нужен приёмный буфер и строка со спецификаторами,
внутри которых можешь и вставлять перевод строки 13,10
пример на FASM'e будет такой (выводит значения регистров):

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
include 'win32ax.inc'
;-------------
.data
title    db  'Лабораторная 5',0
frmt     db  13,10,'Регистр EAX: %08X'
         db  13,10,'Регистр EBX: %08X'
         db  13,10,'Регистр ECX: %08X'
         db  13,10,'Регистр EDX: %08X'
         db  13,10,'Регистр EBP: %08X',0
buff     db  0
;-------------
.code
start:
        invoke  wsprintf,buff,frmt,eax,ebx,ecx,edx,ebp
        invoke  MessageBox,0,buff,title,0
        invoke  ExitProcess,0
.end start
Изображения
 
2
0 / 0 / 0
Регистрация: 07.10.2017
Сообщений: 9
26.03.2020, 16:39  [ТС] 3
По идее этот код должен работать и в masm, но MessageBox даже не появляется.

Может как-то отдебажить можно? Я просто через MASM32 Editor делаю, на IDE Это мало похоже.

Добавлено через 24 минуты
Получилось, нужно было добавить
Assembler
1
addr
перед
Assembler
1
buff
и
Assembler
1
frmt
Спасибо большое!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2020, 16:39
Помогаю со студенческими работами здесь

Как в элементе управления CListCtrl в разных строках вывести разные иконки?
Код нижеследующий. Результат: во всех строках иконки - одинаковые. Но, по крайней мере, с каждым...

Системный таймер. Вывести дату и время на экран на разных строках экрана
Вывести дату и время на экран на разных строках экрана. .model small .stack 128h .data den...

Как вывести несколько переменных в Label
Как вывести WRITELN (' ',X3,' ',X3,' ',X3,' ',X3 ,' ',X3 ,' ',X3 ,' ',X3 ,' ',X3); эти переменные в...

Как вывести в название консоли несколько переменных?
Как вывести в название консоли несколько переменных? Что-бы там было ( a = переменная и b =...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru