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