ASCIIと16進数
CoddyのAssemblyジャーニー「基礎」セクションの一部 — レッスン 13/45。
コンピュータは数字しか理解できません。それでは、「A」、「b」、「?」のような文字はどのように保存されるのでしょうか?
答えは ASCII (American Standard Code for Information Interchange) です。ASCIIは、すべての文字に数値を割り当てるテーブルです。
ASCIIの仕組み:
| 文字 | ASCII番号 (10進数) | ASCII番号 (16進数) |
|---|---|---|
| 'A' | 65 | 0x41 |
| 'B' | 66 | 0x42 |
| 'C' | 67 | 0x43 |
| 'a' | 97 | 0x61 |
| 'b' | 98 | 0x62 |
| '0' | 48 | 0x30 |
| '1' | 49 | 0x31 |
| ' ' (スペース) | 32 | 0x20 |
| '\n' (改行) | 10 | 0x0A |
| '\0' (ヌル文字) | 0 | 0x00 |
アセンブリのために覚えておくべき重要なASCII値:
| 文字 | 16進数 | 必要な理由 |
|---|---|---|
| 'A' | 0x41 | 大文字はここから始まります |
| 'a' | 0x61 | 小文字はここから始まります |
| '0' | 0x30 | 数字はここから始まります |
| スペース | 0x20 | 単語の区切り |
改行 (\n) | 0x0A | 次の行への移動 |
ヌル文字 (\0) | 0x00 | 文字列の終端マーカー |
パターンに注目してください:
| パターン | 例 |
|---|---|
| 大文字の A-Z は連続しています | 'A'=65, 'B'=66, 'C'=67... |
| 小文字の a-z は連続しています | 'a'=97, 'b'=98, 'c'=99... |
| 数字の 0-9 は連続しています | '0'=48, '1'=49, '2'=50... |
| 小文字 = 大文字 + 32 | 'a' (97) = 'A' (65) + 32 |
文字列がメモリにどのように格納されるか:
改行を含む「Hi」という単語は、次のように格納されます:
| 文字 | 16進数 | 2進数 |
|---|---|---|
| 'H' | 0x48 | 01001000 |
| 'i' | 0x69 | 01101001 |
| '\n' | 0x0A | 00001010 |
アセンブリでは、これを次のように記述します:db 'Hi', 0x0A
アセンブリでこれが必要な理由:
data.asm で文字列を定義すると、メモリにASCIIコードを格納することになります。文字列をプリントすると、オペレーティングシステムがそれらのASCIIコードを読み取り、対応する文字を表示します。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。