なぜ16進数?
CoddyのAssemblyジャーニー「基礎」セクションの一部 — レッスン 10/45。
コンピュータがバイナリを使用していることは、もうご存知でしょう。では、なぜアセンブリプログラマがバイナリを直接書くことはめったにないのでしょうか?
2進数の問題点:
2進数は非常に長くなります。次の例を見てください:
| 数値 | 2進数 |
|---|---|
| 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進数がコンピュータに最適なのか:
1つの16進数は、正確に4ビット(半バイト)を表します。
| ビット | 必要な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進数(hex)が使われる場所:
- メモリ番地(
0x7FFFや0x402000など) - ASCIIコード('A' を表す
0x41や、改行を表す0x0aなど)
- デバッガ内のレジスタ値
- 色の値(赤を表す
0xFF0000など)
16進数はプレフィックス(接頭辞)を付けて記述されます:
| プレフィックス | 例 | 意味 |
|---|---|---|
0x | 0xFF | 16進数のFF(10進数で255) |
$ | $FF | 同じ意味(一部のアセンブラで使用されます) |
h | FFh | 同じ意味(古いスタイル) |
このコースでは、0x接頭辞を使用します:0x0a、0x41、0xFF。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。