使用Assembly在Struct内部处理数组

时间:2017-01-23 17:24:20

标签: c++ assembly visual-studio-2015

我试图从结构中的数组中检查偶数,但我不认为我写了一些正确的东西。在调试时,(即count = 3 v [] = {1,2,4}),在达到“cmp eax,[ebp + 12]和je outt;”之后,它就会突然出现:就是这样。

s应该保留所有偶数的总和,int suma(test *)中的eax是数组的索引,而edx在将它移动到s之前保留总和

我做错了什么?

#include "stdafx.h"
#include <iostream>
using namespace std;

struct test {

int v[10];
short count;

};

test a;
int s = 6;

int suma(test *)
{
_asm {
    mov eax, 0;                 // i for counting inside array
    mov edx, 0;                 // sum of even elements
    mov ebx, [ebp + 8];         // array v adress


loop:
    cmp eax, [ebp + 12];
    je outt;

    mov ecx, [ebx + 4 * eax];
    inc eax;

    mov edi, ecx
    and ecx, 1;
    cmp ecx, 1;
    je loop;
    add edx, edi;
    jmp loop;


outt:
    mov eax, edx;
}

return s;

}


int main()
{

cin >> a.count;
for (int i = 0; i < a.count; i++)
    cin >> a.v[i];

_asm {

    LEA eax, a
    push eax;
    call suma;
    add esp, 4;
    mov s, eax;
}

cout << s;

return 0;
}

0 个答案:

没有答案