Почему шестнадцатеричная система?
Часть раздела Основы путешествия по Assembly на Coddy. Урок 10 из 45.
Теперь вы знаете, что компьютеры используют двоичную систему. Так почему же программисты на языке ассемблера редко пишут двоичный код напрямую?
Проблема с двоичной системой:
Двоичные числа очень длинные. Посмотрите на этот пример:
| Число | Двоичное представление |
|---|---|
| 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 идеально подходит для компьютеров:
Один hex-разряд представляет ровно 4 bits (половину byte).
| bits | Необходимое количество hex digits |
|---|---|
| 4 bits (ниббл) | 1 hex-разряд |
| 8 bits (1 byte) | 2 hex-разряда |
| 16 bits (2 bytes) | 4 hex-разряда |
| 32 bits (4 bytes) | 8 hex-разрядов |
| 64 bits (8 bytes) | 16 hex-разрядов |
Одно и то же число тремя способами:
| Десятичная | Двоичная | Шестнадцатеричная |
|---|---|---|
| 255 | 11111111 | FF |
| 1000 | 1111101000 | 3E8 |
| 65535 | 1111111111111111 | FFFF |
Обратите внимание, насколько hex короче двоичной системы счисления.
Где вы встретите hex в ассемблере:
- Адреса памяти (например,
0x7FFFили0x402000) - Коды ASCII (например,
0x41для «A»,0x0aдля перевода строки)
- Значения регистров в отладчиках
- Значения цветов (например,
0xFF0000для красного цвета)
Шестнадцатеричные числа записываются с префиксом:
| Префикс | Пример | Значение |
|---|---|---|
0x | 0xFF | FF в hex (255 в десятичной системе) |
$ | $FF | То же самое (используется в некоторых ассемблерах) |
h | FFh | То же самое (старый формат) |
В этом курсе мы используем префикс 0x: 0x0a, 0x41, 0xFF.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Машина
Что такое CPUПамятьРегистры против памятиКак работают инструкцииПаттерн двух файловАрхитектура x86-642Системы счисления
Почему двоичная система?Двоичные числаИз десятичной в двоичнуюПочему шестнадцатеричная система?Из шестнадцатеричной в десятичнуюИз десятичной в шестнадцатеричнуюASCII и HexПотренируйтесь самостоятельно: Песочница Assembly