のように、16 ビットの符号付き数値を 32 ビット レジスタに符号拡張する例を見てみましょうmov $+/-5, %ax
movswl %ax, %ebx
。
次の 2 つのケースが考えられます。
上位ビットはゼロです (数字は正です)。これは非常に理解しやすく直感的です。たとえば、数字がある場合
5
、左にゼロを埋め込むことは非常に理解しやすいです。例えば:00000000 00000101 # 5 (represented in 16 bits) 00000000 00000000 00000000 00000101 # 5 (represented in 32 bits)
ただし、理解するのが難しいのは、それが負の数であり、符号拡張する場合です。例:
11111111 11111011 # -5 (represented in 16 bits) 11111111 11111111 11111111 11111011 # -5 (represented in 32 bits)
はい、上位ビットを で埋めるだけであることはわかってい1
ます。しかし、何がそれを機能させるのでしょうか? おそらく、2進数の「プロパティ」がそれを可能にするものについての一種の説明は、これをよりよく理解するのに役立つでしょう.