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 コードを読み取り、対応する文字を表示します。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Assemblyプレイグラウンド