非常に単純なアセンブリ言語プログラムから、次の2つのステートメントを検討してください。
DATA1 DB +200
DATA2 DB -130
アセンブルしようとすると、バイトが10進数で-128を超える可能性があるため、アセンブラーはno2ステートメントでエラーを出します。しかし、なぜアセンブラーは1つのステートメントでエラーを出さなかったのでしょうか。結局のところ、1バイトは最大127個の正の符号付き整数を保持できます。代わりに、アセンブリはそのバイトに値C8を入れます。
おそらく、リテラルが符号付きか符号なしかがわかりません。アセンブラーにとって、それほど驚くことではありませんが、両方のユースケースがあります。
-130は、署名する必要があり、-128より小さいため、バイトに収まることはありません。一方、200は符号なしバイトにうまく適合します。これは、アセンブラがとるビューのようです。符号なしバイトとして解釈される場合、0xC8は200です。
任意の数値は、実行可能ファイルにアセンブルされるときにビットの配列に変換されます。たとえば、-1は0xFF、-2は0xFEなどです。-1と255の唯一の違いは、コードでの使用方法です。アセンブラは気にせず、使用するデータを保存したいだけです。
つまり、要点は次のとおりです。
フィールドの内容は、意図したとおりに意味します。このすべての結果は、プログラムが処理する数値の大きさについて良い考えを持っている必要があり、それに応じてフィールドサイズを定義する必要があるということです。
PeterAbelの「IBMPCアセンブリ言語とプログラミング」。
また、同じ著者による「ADD命令とSUB命令は、符号なしデータと符号付きデータを区別せず、実際、ビットを加算および減算するだけです」