好吧,我已经阅读了与我类似的问题,但我还没有能够解决这个问题。我也检查了这个,这显然可以解决我的问题。但它没有。
我正在处理的文件中有一个 C 函数:
void copiarMuestreo(unsigned short * source, int * sPos, unsigned short * destination, int * dPos, int bitsPerSample ) {...}
它的所有内部操作都在 C 中完成。source是指向向量的指针,destination也是如此。
我正在尝试从内联汇编代码中调用此函数(我将把整个函数放在这里):
void unirArchivosWAVE( unsigned short *parte1, unsigned short *parte2, unsigned short *salida, int bitsPorMuestreo ){
int posParte1; //Posicion en la que lee la primera muestra
int posParte2; //Posicion en la que lee la segunda muestra
int posSalida; //Posicion en la que escribe las muestras
int i = pistaEntrada1.numSamples;
__asm {
push eax
push ebx
push ecx
push edx
push edi
mov edi, i
mov i, 0
mov posParte1, 0
mov posParte2, 0
mov salida, 0
forGrande:
cmp i, edi
jge finForGrande
lea bx, posParte1
lea cx, posParte2
lea dx, posSalida
push bitsPorMuestreo
push dx
push salida
push bx
push parte1
call copiarMuestreo
pop parte1
pop bx
pop salida
pop dx
pop bitsPorMuestreo
push bitsPorMuestreo
push dx
push salida
push cx
push parte2
call copiarMuestreo
pop parte2
pop cx
pop salida
pop dx
pop bitsPorMuestreo
inc i
jmp forGrande
finForGrande:
fin:
pop edi
pop edx
pop ecx
pop ebx
pop eax
}
}
我正在使用 VS2012 Express 在 Intel Core i5 中使用 Windows 8、64 位进行编程。该程序完美地崩溃了,在任何地方都没有任何错误消息,我怀疑这是一个段错误。但为什么?
起初我在调用之前推送 32 位寄存器,我认为它们是 4 个字节而不是短裤使用的 2 个字节是问题所在。不,它仍然崩溃。
我一无所知。我没有尝试过其他任何东西,因为好吧,我根本不知道该尝试什么。我是组装新手。
对不起西班牙变量名。