2

さて、私は私のものに似た質問を読みましたが、まだこの問題を解決できていません。これもチェックしましたが、これは明らかに私の問題を解決する可能性があります。しかし、そうではありませんでした。

作業中のファイルに 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 バイトであることが問題であると考えました。いいえ、まだクラッシュします。

私は無知です。何を試したらいいのかわからないので、他に何も試していません。組み立て初心者です。

スペイン語の変数名で申し訳ありません。

4

1 に答える 1