さて、私は私のものに似た質問を読みましたが、まだこの問題を解決できていません。これもチェックしましたが、これは明らかに私の問題を解決する可能性があります。しかし、そうではありませんでした。
作業中のファイルに 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
}
}
Intel Core i5で、VS2012 Expressを使用してWindows 8、64ビットでプログラミングしています。プログラムはどこにもエラー メッセージが表示されずに見事にクラッシュします。しかし、なぜ?
最初は呼び出す前に 32 ビット レジスタをプッシュしていましたが、ショートで使用される 2 バイトではなく 4 バイトであることが問題であると考えました。いいえ、まだクラッシュします。
私は無知です。何を試したらいいのかわからないので、他に何も試していません。組み立て初心者です。
スペイン語の変数名で申し訳ありません。