私の教科書から 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 ビットのポインターにすることはできませんか?