首页 > 解决方案 > 汇编x86中数组中整数的最长运行

问题描述

我无法在 x86 程序集的数组中找到最长的整数。我有一个要传入的数组,以及数组的大小,我认为我的逻辑已经步入正轨,只是无法弄清楚最后的步骤。任何帮助表示赞赏。这是我到目前为止的代码:

int  Longest_Run(int nums[], int siz) {
    //
    int returnValue = 0;
    int freq[101] = { 0 };  //if needed
    int arr_length = 0;


    arr_length = sizeof(nums) / sizeof(int); //WRONG

    __asm {
        //LONGEST RUN. Return value to caller :

        MOV ECX, siz // arr_length //For looping
        //LEA ESI, nums //ptr to array
        mov ESI, nums //ptr to array
        //LEA EDI, nums //ptr to array
        MOV EBX, 0 //Frequency counter
        MOV EAX, [ESI] //First array int in SI

        L1:
        CMP EAX, [ESI] //Compare 1st int with 1st int
            JE L2
            JMP L3
        L4:
            LOOP L1
        JMP CLEAR

            L2 :  //If equal
            INC EBX //Inc counter  
            ADD ESI, 4 //Inc to 2nd item in array
            MOV EAX, [ESI] //Move 2nd item into AX
            JMP L1


        L3 :
        PUSH EBX // Puts counter int on stack
            MOV EBX, 0 // Clears BX to start over
            ADD ESI, 4 //Inc to 3rd item in array
            MOV EAX, [ESI] //Move 3rd item into AX
            JMP L4


            CLEAR:

            POP EDX
            MOV EDX, returnValue


            //END

    }
    return returnValue;
}

有什么想法或指导吗?

标签: arraysassemblyx86

解决方案


推荐阅读