汇编语言代码,用于在数组中查找正数

时间:2017-10-25 15:13:14

标签: arrays inline-assembly

我们只能编辑粗体部分以从给定数组中找到正数。这就是我在visual basic中尝试过的,我只是将结果变为零,有人可以说出错吗?

int solution(const int arr[], size_t arr_size)
{
    int result = 0;
    __asm
    {
        **MOV eax, arr
        MOV edx, eax
        MOV ebx, 10
        XOR ecx, ecx
        LEA esi, size arr
        NEXT2 : 
        MOV edi, esi
                SHR edi, 10
                JNC NEXT1
                JMP NEXT3
                NEXT1 : INC ecx
                        NEXT3 : INC SI
                                DEC ebx
                                JNZ NEXT2
        MOV[result], ecx;**
    }
        return result;
}
    int main()
    {
        int result;
        int arr[] = { 0, -1, 2, -3, 4, -5, 6, -7, 8, -9 };
        result = solution(arr, sizeof(arr) / sizeof(arr[0]));
        printf("Grade 6 result = %d\n", result);
        getchar();
        return 0;
    }

1 个答案:

答案 0 :(得分:0)

1)这是我用来获取数组大小的一段代码:

arrlength

你寻找' \ 0'是字符串存储就像一个char数组,寄存器只存储第一个字符串,循环来获取另一个字符串,直到它得到结束'结束'字符。我相信其他角色会让循环停止,不确定哪一个,但是\ 0确实有效

2)然后使用 MOV ecx, arrlength ; This sets the loop counter register (ECX) to the size of your array MOV ebx, 0 ; Set this to 0 as we will use it again as index MOV esi, 0 ; Same compareLoop: MOV eax, arr[ebx] ; load value of arr at index ebx CMP eax, 0 ; sets flag, comparing eax to 0 JL lessThan ;JL --> jump if first operand lower than second operand MOV newArr[esi], eax ;Put the value (which is >0, in a new array) add esi, 4 ; To point to the next position lessThan: add ebx, 4 ; adding for to ebx so that now it has the index of next value in array loop compareLoop ; until ecx = 0 中存储的值作为检查数组并找到正数所需的循环次数。

{{1}}

我基本上向你展示了我将如何做到这一点,我远非职业选手,而且根本不了解你的进展方式。