なぜ16進数?
CoddyのAssemblyジャーニー「基礎」セクションの一部。レッスン 10/45。
コンピューターが二進数を使うことはもう知っていますね。では、なぜアセンブリプログラマーは二進数を直接書くことがほとんどないのでしょうか?
2進数の問題:
2進数はとても長くなります。次の例を見てみましょう:
| 数値 | 2進数 |
|---|---|
| 255 | 11111111 |
| 1000 | 1111101000 |
| 65535 | 1111111111111111 |
1と0の長い文字列を書くのは、時間がかかり、間違いやすく、読みにくいものです。
解決策:十六進数(16進法)。
十六進数(または「hex」)では、16個の記号を使用します:
| 桁 | 値 |
|---|---|
| 0-9 | 0から9 |
| A | 10 |
| B | 11 |
| C | 12 |
| D | 13 |
| E | 14 |
| F | 15 |
hex がコンピューターに最適な理由:
1つの hex digits は、正確に 4 bits(1 byte の半分)を表します。
| Bits | 必要な hex digits |
|---|---|
| 4 bits(ニブル) | 1 hex digit |
| 8 bits(1 byte) | 2 hex digits |
| 16 bits(2 bytes) | 4 hex digits |
| 32 bits(4 bytes) | 8 hex digits |
| 64 bits(8 bytes) | 16 hex digits |
同じ数を3通りで表す:
| 10進数 | 2進数 | 16進数 |
|---|---|---|
| 255 | 11111111 | FF |
| 1000 | 1111101000 | 3E8 |
| 65535 | 1111111111111111 | FFFF |
hex は binary よりもどれほど短いかに注目してください。
アセンブリでhexを見かける場所:
- メモリアドレス(
0x7FFFや0x402000など) - ASCIIコード('A' を表す
0x41や改行を表す0x0aなど)
- デバッガーのレジスタ値
- 色の値(赤を表す
0xFF0000など)
16進数は接頭辞を付けて表記します:
| 接頭辞 | 例 | 意味 |
|---|---|---|
0x | 0xFF | 16進数のFF(10進数の255) |
$ | $FF | 同じ意味(一部のアセンブラで使用) |
h | FFh | 同じ意味(古い形式) |
このコースでは、0x プレフィックスを使用します:0x0a、0x41、0xFF。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Assemblyプレイグラウンド