私は非常に単純な問題があります。私はいくつかの結果を格納する配列を持っている インラインアセンブラルーチン。私が持っている質問は、どのようにして のインラインアセンブラから配列にデータを移動することができるのですか?私はx86マシン上でコンパイルするためにgccを使用しています。終わりにインラインアセンブリからC言語の配列にデータを移動
int main() {
int result[32];
__asm__ __volatile__( ".mov esi, 32 \n\t");
__asm__ __volatile__( ".mov edi, 32 \n\t");
__asm__ __volatile__( ".rept 32 \n\t");
__asm__ __volatile__( ".mov eax, esi \n\t");
__asm__ __volatile__( ".sub eax, edi \n\t");
__asm__ __volatile__( ".sub edi, 1 \n\t");
//Code here for storing eax in result[0], result[1], ... result[31],
__asm__ __volatile__( ".endr \n\t");
for(i=0; i<32; i++)
printf("%d\n", results[i]);
return (0);
}
、出力はそのようになります。次の簡単なコードfragementを考えてみましょう
結果を[0] = 32; 結果[1] = 31;結果[2] = 30; ... 結果[31] = 1;
誰でもいいのですが、どうすれば簡単にできますか?
ありがとうございます! "サブEDI" 行の前に置く。このラインは、(& T構文AT - 目的地は右側にある)のコピーを行います
はじめに、アセンブラを別々のステートメントに分けないでください。コンパイラは、理論的には、それらの間の間隔でレジスタを踏み外すことができます。 – bdonlan