Я пытаюсь передать массив 4-байтовых целых чисел от C до 32-битного nasm в Linux.Вызов функции передает указатель на первое целое число и длину в целочисленном значении в этом порядке.С-программа читает список чисел из файла.Я проверил, что массив заполняется правильно.
Когда я запускаю следующий код, я получаю непротиворечивые, большие значения.Каждое значение совпадает с последним, и ни одно из них не было в исходном массиве.
Соответствующий код носма выглядит следующим образом:
_sumAndPrintList:
push ebp
mov ebp, esp
sub esp, 16
push ebx
push ecx
push edx
push edi
push esi
mov ebx, [ebp + 8] ;Pointer to start of list
mov ecx, [ebp + 12] ;Size of list
push ebx
push ecx
push header ;This is a string and prints correctly
call printf
add esp, 4
pop ecx
pop ebx
xor edi, edi ;counter
xor esi, esi ;running total
printLoop:
cmp edi, ecx ;check if at end of list
je endPrintLoop
add esi, [ebx] ;add value in ebx to esi
mov [value], ebx ;move value in array to value
mov [total], esi ;put esi in total
push ebx
push ecx
push edi
push esi
push total
push value
push printNums ;string that prints the value and then the total
call printf
add esp, 12
pop esi
pop edi
pop ecx
pop ebx
add ebx, dword 1
inc edi
jmp printLoop
Все печатается правильно, только значения неверны, аВсего не так.Я довольно новичок в сборке, поэтому, если я добавил слишком много или слишком мало или у вас есть вопросы, не стесняйтесь спрашивать / сообщать мне.