Преобразование кода C ++ в код сборки в MASM - PullRequest
0 голосов
/ 17 апреля 2020

Мне нужно выяснить, как преобразовать этот код C ++ в сборку, используя директивы .IF и .WHILE, и предположить, что все переменные являются 32-разрядными целыми числами со знаком. Я работаю с компилятором MASM в Visual Studio 2019. Это код, который я должен преобразовать:

int array[] = {10,60,20,33,72,89,45,65,72,12};
int sample = 50;
int ArraySize = sizeof array / sizeof sample;
index = 0;
int sum = 0;
while( index < ArraySize )
{
    if ( array[index] <= sample)
    {
        Sum+= array[index];
    }
    index++;
}

Это то, что у меня есть для преобразования:

INCLUDE Irvine32.inc

.data

array DWORD 10,60,20,33,72,89,45,65,72,12
arraySize = SIZEOF array / SIZEOF sample
sample DWORD 50
index DWORD 0
sum DWORD 0

.code
main PROC

call clrscr
mov ecx, arraySize
xor ebx, ebx
mov eax, sum

.WHILE ebx < ecx
mov edx, array[ecx*4]

.IF eax <= sample
add eax, edx

.ENDIF
inc ebx

.ENDW

push eax
pop edi
call writeInt
call crlf

exit
main ENDP
END main

Это это вывод, который я должен иметь. Output

Однако при запуске программы я получаю +100 вместо +126. Что я делаю неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...