3

これは私の現在のコードです:

void int32hex(u32 val, char *out) {
    asm("rev %[dst], %[src]" :: [dst]"=r"(val), [src]"r"(val));

    binhex((u8*)&val, 4, out);
}

私の考えは、引数を取り、命令valを使用してそれを反転させ(エンディアン) 、それを渡すことです。rev

私が読んだことから、上記のコードは正しいようです。宛先レジスタには=rフラグがあり、レジスタに書き込むことができることを意味します。ただし、GCC を介して実行すると、エラーが発生します: 入力オペランドの制約に '=' が含まれています

フラグを単にに変更すると、正常にrコンパイルされますが、の値はval変更されません。

4

1 に答える 1

4

エラーは、何が問題なのかを示しています。=制約は入力ではなく出力にのみ適用され、asm パターンには 2 つの入力 (紛らわしく 'dst' と呼ばれる 1 つ) があり、出力はありません。おそらく「dst」を出力にするつもりでした:

asm("rev %[dst], %[src]" : [dst]"=r"(val) : [src]"r"(val));
于 2013-11-02T00:55:01.470 に答える