比较向量的2个指针的元素

时间:2019-01-19 15:43:38

标签: assembly

我想使用已经排序的2个向量,并且我想将它们混合在一起成为第三个向量。问题是我不知道如何比较函数中那两个向量的元素。我在c ++项目中使用Visual Studio 2015,因为我在课程中使用汇编语言进行编码。

我尝试了一些操作,但没有得到答案,我想将这些向量的地址放入另一个寄存器中,但我用光了,因为我不知道从eax到edx的其他可用的regiter,我的问题是,是否可以在程序集中声明变量。

在代码下面,我评论了用c ++编写的类似功能。

int ic(int *src1, int n1, int *src2, int n2, int *dst)
{
_asm {
    mov eax,0 //i
    mov ebx,0
    mov ecx,0
    inside:
    cmp ebx,n2
    jge outside
    cmp ecx,n2
    jge outside
        cmp src1[ebx*4],src2[ecx*4]
        jle lower
        mov dst[eax*4],src2[ecx*4]
        inc ecx
        lower:
        mov dst[eax*4],src1[ebx*4]
        inc ebx
        inc eax
        jmp inside
    outside:
        cmp ebx,n1
        jne a1
            inside2:
                cmp eax,n2
                jge outside2
                mov dst[eax*4],src2[ecx*4]
                inc eax
                inc ecx
                jmp inside2
            outside2:
                ret eax
        a1:
            inside3:
                cmp ebx,n1
                jge outside3
                    mov dst[eax*4],src1[ebx*4]
                    inc eax
                    inc ebx
                    jmp inside3
                outside3:
                    ret eax
}
/*
int i,a1,a2;
for (i = 0, a1 = 0, a2=0; a1<n1 && a2<n2; i++)
{
    if (src1[a1] > src2[a2])
    {
        dst[i] = src2[a2];
        a2++;

    }
    else
    {
        dst[i] = src1[a1];
        a1++;
    }
}
if (a1 == n1)
{
    for (; a2 < n2; i++)
    {
        dst[i] = src2[a2];
        a2++;
    }
}
else
{
    for (; a1 < n1; i++)
    {
        dst[i] = src1[a1];
        a1++;
    }
}
return i;*/

}

0 个答案:

没有答案