0

私の教科書から 1 つの演習があります。

int comp(data_t a, data_t b) {
    return a COMP b;
}

は、引数 a と b の一般的な比較を示しています。ここでは、typedef 宣言で data_t を宣言することによって引数のデータ型を設定でき、#define 宣言で COMP を定義することによって比較を設定できます。a が %edx にあり、b が %eax にあるとします。次の各命令シーケンスについて、data_t のデータ型を特定します (複数の正解がある可能性があります。すべてをリストする必要があります)。

cmpl %eax, %edx
setl %al

そして、教科書からの答えは次のとおりです。

サフィックス 'l' とレジスタ識別子は 32 ビット オペランドを示しますが、比較は 2 の補数 '<' です。data_t は int でなければならないと推測できます。

だから私の質問は次のとおりです。考えられるすべての回答をリストするように求めているので、なぜ data_t も 'long int' および 32 ビットのポインターにすることはできませんか?

4

1 に答える 1