0

私はアセンブリで小さなプログラムを書いていますが、2の累乗でレジスタの最後のビットを使用するintを計算する必要があります。2 ^ 31を計算し、その結果をebxレジスタに格納する必要があるとします。

このintを算術演算の符号なしとしてどのように扱うことができますか?

4

2 に答える 2

2

2の累乗を計算するには、左シフト操作を使用します。

SAL    EAX,31

加算と減算の操作は、符号付きの値と符号なしの値で同じです。つまり、結果を処理する場合(表示など)にのみ、符号付きまたは符号なしと見なす必要があります。

IDIV除算と乗算には、符号付き( 、IMUL)と符号なし(DIVMUL)の異なる命令があります。

于 2012-04-11T18:49:10.603 に答える
1

多くのアセンブリ言語(つまり、命令セットアーキテクチャ)のデータは、サイズがある場合を除いて、タイプレスです。つまり、8ビットは16とは異なる「タイプ」です。

EBXレジスタは署名も署名もされていません。32ビットのバンクです。

ビットのセマンティクス(ビットの意味)は、適用される操作に依存し、高級言語のように宣言されたタイプには依存しません。

x86は、「論理シフト」と「算術シフト」を区別します。

したがって、計算1 << 31するには、論理左シフト(SAL)を使用します。符号付き数量をシフトするには、算術シフトを使用します。

于 2012-04-11T18:52:59.853 に答える