2009-05-27 5 views
1

そして再び...ダイナミックラベル

私はいくつかのインラインアセンブリをやっていると私は.reptを使用して ことにより、いくつかのコードを数回実行したいです.rept次の行かのように行動するようにアセンブラに指示しディレクティブは、ただ.ENDR前1まで、指定した回数を繰り返しています。

明白な問題は、ラベル18が既に指定されていることはもちろんです。各反復のためのいくつかの動的なラベルを生成するための方法がある場合、私は のだろうか?

__asm__ __volatile__ (".rept 10 \n\t"); 
    __asm__ __volatile__( "test eax, eax \n\t"); 
    __asm__ __volatile__( "jne 18f\n\t"); 
    ... 
    __asm__ __volatile__( "18: nop 18f\n\t"); 
    __asm__ __volatile__( ".endr\n\t"); 

答えて

1

あなたが手で作業の一部をやってもかまわない場合は、これは現在のターゲットアドレスに評価ビルトイン.(ドット)の記号を、使用してなんとかする必要があります。 the documentationを参照してください。

asm volatile("jne .+1"); 
1はもちろん、あなたがジャンプする方法を遠くに応じて変更する必要がある

を:あなたのような何かを行うことができるはず。オフセットはバイト単位で必要なので、これは手作りの部分です。私はこれをテストしていないが、それはうまくいくと思う。ドキュメントの

This pageもあなたも、その技術を使用することができるかもしれない、ラベルを生成するために、文字列置換を使用する方法を示しています。

1

はなぜ.reptと.ENDRとだけではなく、ループをスキップしていませんか? (あなたは10回のループではなく、16をしたい場合や0A)10にECXセットは.ENDR文がある(あなたのREPT文があると言う、loopbegin :)、およびloop loopbegin)ラベルを置きます。そうすれば、あなたの18ラベルはあいまいではありません。