0

問題があります。配列の最後の 3 つの要素を最初の 3 つに置き換える関数でポインターを送信します。unsigned char 配列を使用して送信する必要があり、ASM で動作するはずです。

    int main(int argc, char* argv[])
{
    unsigned char arr[24]={
        1,2,3,4,5,6,
        7,8,9,10,11,12,
        13,14,15,16,17,18,
        19,20,21,22,23,24
        };// example

        AsmFlipVertical(arr);
};
void AsmFlipVertical(unsigned char  *arr)
{
_asm
    {
        les esi,arr ; esi=adress of first elem
        mov eax,esi
        add eax,21  
        mov edi,eax ; edi=adress of first elem+21;edi is a adress of 21th elem of array
        cld 
        mov ecx,3
        rep movsb 
    }
}

esi から edi への movsb "rep movsb" でエラーが発生しました。何が問題なのですか? この ASM コードをメイン関数で使用する場合は問題ありませんが、関数で ASM コードを使用する必要があります...

4

2 に答える 2

0

命令が間違っています( les esi, arres reister も変更したくありません) 使用する必要がありますmov esi, arr (テスト済み - 動作)

于 2012-09-30T14:44:41.293 に答える
0

flatメモリ モデルのセグメント レジスタに影響を与える命令は使用しないでください。したがって、次のように置き換えles esi,arrますmov esi,arr

于 2012-09-30T14:46:44.740 に答える