私はアセンブリで小さなプログラムを書いていますが、2の累乗でレジスタの最後のビットを使用するintを計算する必要があります。2 ^ 31を計算し、その結果をebxレジスタに格納する必要があるとします。
このintを算術演算の符号なしとしてどのように扱うことができますか?
2の累乗を計算するには、左シフト操作を使用します。
SAL EAX,31
加算と減算の操作は、符号付きの値と符号なしの値で同じです。つまり、結果を処理する場合(表示など)にのみ、符号付きまたは符号なしと見なす必要があります。
IDIV
除算と乗算には、符号付き( 、IMUL
)と符号なし(DIV
、MUL
)の異なる命令があります。
多くのアセンブリ言語(つまり、命令セットアーキテクチャ)のデータは、サイズがある場合を除いて、タイプレスです。つまり、8ビットは16とは異なる「タイプ」です。
EBXレジスタは署名も署名もされていません。32ビットのバンクです。
ビットのセマンティクス(ビットの意味)は、適用される操作に依存し、高級言語のように宣言されたタイプには依存しません。
x86は、「論理シフト」と「算術シフト」を区別します。
したがって、計算1 << 31
するには、論理左シフト(SAL)を使用します。符号付き数量をシフトするには、算術シフトを使用します。