我想使用已经排序的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;*/
}