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