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

У меня есть программа, которая решает математическую задачу 5 раз с разными значениями, используя цикл. Он сохраняет результат в массиве result, поэтому в конце мне нужно показать эти значения, начиная с новой строки:

result[0]
result[4]
result[8]
result[12]
result[16]

Но я, кажется, не понимаю, как реализовать это в моем коде, все методы, которые я пробовал, не работали. Прямо сейчас он показывает только 1 результат. Я понимаю, что способ начать новую строку - это ,10, но я просто не знаю, где это правильно поставить.

.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

person John    schedule 24.03.2020    source источник
comment
Почему бы вам просто не использовать wsprintf или другую подобную функцию, в которой вы можете поместить символы новой строки непосредственно в строку формата?   -  person Michael    schedule 24.03.2020
comment
@Michael, не могли бы вы привести небольшой пример или некоторую информацию о том, как я могу адаптировать это в своем коде, если у вас есть время и возможность? Я только начал изучать ассемблер, и вывод MessageBox, а AnswerNum взят из более простого примера сложения калькулятора. Я даже не понимаю, зачем нам нужно резервировать это место, чтобы позже поместить туда ASCII-целое число.   -  person John    schedule 24.03.2020
comment
MASM32 поставляется с множеством примеров, и в некоторых из них используется wsprintf. Например, examples\exampl02\dir и examples\exampl03\lcd.   -  person Michael    schedule 24.03.2020
comment
@Майкл, спасибо! Заглянет!   -  person John    schedule 24.03.2020


Ответы (1)


.386
.model flat,stdcall
option casemap:none

include \masm32\include\masm32rt.inc

.data
titletext db  'Лаб 5',0
frmt db  '1 = %d',10
     db  '2 = %d',10
     db  '3 = %d',10
     db  '4 = %d',10
     db  '5 = %d',0
buff db  256 dup (0)
result dd ?,?,?,?,?

и после заполнения массива result[0],result[4],result[8],result[12],result[16]:

        invoke  wsprintf,addr buff,addr frmt,result[0],result[4],result[8],result[12],result[16]
        invoke  MessageBox,0,addr buff,addr titletext,MB_OK
        invoke  ExitProcess,0
end start

также вы можете использовать функцию crt_sprintf, она даже немного более гибкая, позволяя использовать числа с плавающей запятой.

person John    schedule 03.04.2020