1

仮想マシンとそのためのCコンパイラを作成しています。ただし、ほとんどの命令セットにはIMULとIDIVがありますが、ISUBとIADDはありません。subは通常署名されていないsubなので、x86のようなことをどのように行うことができますか

MOV EAX,1
MOV EDX,3
SUB EAX,EDX,EAX

そして-2を取得しますか?

4

2 に答える 2

5

引数が符号付きであるか符号なしであるかに関係なく、減算と加算は同じ結果をもたらすため、それぞれに 1 つの命令しかありません。

于 2012-10-29T18:52:35.747 に答える
5

符号付き加算は常に、符号なし加算と同じビット パターンを出力として生成します。それらの解釈のみが異なります。したがって、2 つのケースに対して個別の命令を用意する必要はありません。引き算も同じです。

一般的な ADD および SUB 命令は、条件フラグの 2 つのグループを設定するため、符号なし比較の場合は ja/jb、符号付き比較の場合は jg/jl を使用して、SUB ベースの比較の結果を後で確認できます。

(より正確には、2^wordlen を法とする符号なし加算/減算を行う命令が既にある場合、それらが生成するビット パターンは、真の結果が表現可能な 2 の補数の符号付き加算/減算ごとに正しくなります。数学的には、符号なし整数と2 の補数の符号付き整数は、2^語長を法とする剰余クラスの正準表現の単なる異なる選択です)。

于 2012-10-29T18:54:58.360 に答える