2016-07-16 4 views
-1

次のことを教えてください。私は、関数が供給された出力配列addrportで指定された入力ポートからcntdwordsを読み取りinsl命令x86文書でinsl命令が見つからないのはなぜですか

static inline void 
    insl(uint32_t port, void *addr, int cnt) { 
     asm volatile (
      "cld;" 
      "repne; insl;" 
      : "=D" (addr), "=c" (cnt) 
      : "d" (port), "0" (addr), "1" (cnt) 
      : "memory", "cc"); 
    } 
+1

命令を検索しようとしましたか? x86アセンブリのためのインターネット上には、たくさんの参考文献があります。 –

+1

gcc拡張アセンブラ構文です。 [gcc assembler extensions](https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html)を見てください。 –

+0

これは命令ではなく機能です。 **具体的に**あなたはドキュメントから理解できませんか?何を試しましたか? – Olaf

答えて

4

を理解することはできません。

inslinsdと等価である:http://x86.renejeschke.de/html/file_module_x86_id_141.html

GAS構文はdword(32ビットサイズ)のデータ上で動作する命令を示すためにlサフィックスを使用します。

+0

なぜ入力パラメータがinsl命令で使用されていないのですか? と同様、insl(%0)、%1:(%2); – Tianxin

+4

@Tianxinこれは古いx86命令セットの単なる遺物です。レジスタ数が少なくなったときにはそれぞれが独自の目的を持っていました。多くの命令は暗黙的な入出力レジスタを使用していましたが、 'in' /' out'は 'ax'と' dx'を使い、文字列命令は 'si' /' di'を使います。暗黙のレジスタは、オペコードをより短く保ちます。 – linguamachina

+0

ありがとう、私はそれを得る。^^ – Tianxin

関連する問題