Мне нужно выяснить, как преобразовать этот код 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
Это это вывод, который я должен иметь.
Однако при запуске программы я получаю +100 вместо +126. Что я делаю неправильно?