Неправильные значения массива int в nasm, переданные из C - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь передать массив 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

Все печатается правильно, только значения неверны, аВсего не так.Я довольно новичок в сборке, поэтому, если я добавил слишком много или слишком мало или у вас есть вопросы, не стесняйтесь спрашивать / сообщать мне.

...