Почему шестнадцатеричная система?
Часть раздела Основы путешествия по 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