Таблица 16 ричной системы. Алфавит шестнадцатеричной системы счисления. §13. Шестнадцатеричная система счисления с традиционным алфавитом

Для написания программ на Ассемблере, необходимо разобраться с шестнадцатеричной системой счисления. Ничего сложного в ней нет. Мы используем в жизни десятичную систему. Уверен, что вы все ее знаете, поэтому я постараюсь объяснить шестнадцатеричную систему, проводя аналогию с десятичной.

Итак, в десятичной системе если мы к какому-нибудь числу справа добавим нуль, то это число увеличится в 10 раз. Например: 1 х 10 = 10; 10 х 10 = 100; 100 х 10 = 1000 и т.д. В этой системе мы используем цифры от 0 до 9, т.е. десять разных цифр (собственно, поэтому она и называется десятичная).

У нас может быть базовая система с двумя номерами, или это двоичная система чисел, где вместо 10 цифр у вас есть только две цифры. Каждое место, вместо того, чтобы быть силой десяти, будет состоять из двух. Теперь вы можете себе представить, что мы можем продолжать расширять это. Мы можем распространяться на три, четыре, пять, шесть, семь, восемь, девять, или мы могли бы даже пойти выше. Как вы можете себе представить, вместо того, чтобы иметь только 10 цифр, он будет иметь Что это за цифры? Как мы увидим, вместо того, чтобы место было степенью двух или степеней десяти, будут полномочия, которые мы можем видеть, мы можем повторно использовать существующие 10 цифр из десятичной системы счисления.

В шестнадцатеричной системе мы используем, соответственно, шестнадцать "цифр". Я специально написал слово "цифр" в кавычках, т.к. в ней используются не только цифры. Да и в самом деле как так? Объясняю: от 0 до 9 мы считаем так же, как и в десятичной, а вот дальше будет так: A, B, C, D, E, F. Число F, как не трудно посчитать, будет равно 15 в десятичной системе (см. табл. 1).

Мы можем повторно использовать ноль, один, два, три, четыре, пять, шесть, семь, восемь, девять, но тогда нам понадобится еще шесть цифр. Соглашение состоит в том, чтобы использовать первые шесть букв. а не цифры, но помните, что это просто произвольные черви на листе бумаги. Это просто произвольные символы, которые мы выросли, чтобы общаться с вещами. Вы выросли, чтобы связать этот символ прямо здесь с восемью вещью, со словом восемь, с которым вы связываетесь, когда видите много объектов. Это буквально означает, что если у тебя есть 10 вещей, то ты бы сказал: «У меня есть вещи там».

Десятичное число

Шестнадцатеричное число

Таблица 1. Десятичная и шестнадцатеричная системы.

Т.о., если мы к какому-нибудь числу в шестнадцатеричной системе добавим справа нуль, то это число увеличится в 16 раз.

Вместо того, чтобы сказать: «Мне 15», можно сказать: «У меня там есть вещи». Теперь, как это помогает? Ну, давайте посмотрим, можем ли мы представить одно и то же число 231 или 231 в десятичном значении. Что такое семь? Каковы значения этих мест? Это первое место представляет 16 для нулевой мощности или по-прежнему представляет собой место. Итак, что здесь представляет это место? Ну, в базе 10, это было 10 до первой мощности. В двух базовых, это было две для первой власти. Это буквально, хорошо, позвольте мне написать слово, это буквально шестьдесят.

Это то, что представляет это число. Ну, это то же самое, что и в 14 раз 14 раз 16. Это будет здесь 14 шестнадцати, 14 раз 16 - 224 плюс семь. Ну, 224 плюс 7 будет давать вам надежду, вы можете это оценить. Вы можете представлять одно и то же количество в любой из этих различных систем счисления. В любом количестве, которое вы можете представить в десятичной форме, вы также можете представить это число в двоичном формате, или в шестнадцатеричном, или в базовом трех, или в базе 60, или в базе 31, что бы вы ни делали.

Пример 1: 1 х 16 = 10; 10 х 16 = 100; 100 х 16 = 1000 и т.д.

Вы смогли отличить в Примере 1 шестнадцатеричные числа от десятичных? А из этого ряда: 10, 12, 45, 64, 12, 8, 19? Это могут быть как шестнадцатеричные, так и десятичные. Для того, чтобы не было путаницы, и компьютер смог бы однозначно отличить одни числа от других, в Ассемблере принято после шестнадцатеричного числа ставить символ h или H (H это сокращение от англ. hexadecimal (шестнадцатеричное). Для краткости его иногда называют просто Hex ) . А после десятичного ничего не ставить. Т.к. числа от 0 до 9 в обоих системах имеют одинаковые значения, то числа, записанные как 5 и 5h одно и тоже.

Возможно, вы заметили шаблон. Чем больше символов у нас, так и в базе 16, у вас есть 16 символов, тем меньше значений места нам нужно представлять одинаковое количество. Один из способов подумать об этом - каждое из мест содержит больше информации. Хотя это здесь только один из двух символов. Это один из десяти персонажей. Чем больше символов у вас есть, тем больше цифр, которые вы могли бы разместить в каждом месте, тем меньше мест вам нужно представлять определенное количество. Это просто интересная вещь, которую нужно наблюдать.

Но, надеюсь, вы выйдете из игры, как и в случае с базой 16, как и я, и это действительно полезно. Это фактически используется, если вы смотрите на большинство веб-страниц. Если вы действительно хотите сделать что-нибудь забавное, позвольте мне дать вам еще один. Опять же, это не очень специализированный. Система чисел, которую мы используем в повседневной жизни, называется десятичной или системой и использует 10 символов от 0 до 9 для представления значения.

Т.о. Пример 1 (см. выше) правильнее будет записать так: 1 х 16 = 10h; 10h x 16 = 100h; 100h x 16 = 1000h. Либо так: 1h x 10h = 10h; 10h x 10h = 100h; 100h x 10h = 1000h.

Для чего нужна шестнадцатеричная система, мы рассмотрим в последующих выпусках. А в данный момент для нашего примера программы, который будет рассмотрен ниже, нам необходимо знать о существовании шестнадцатеричных чисел.

Где и почему используется шестнадцатеричный?

Большинство кодов ошибок и других значений, используемых внутри компьютера, представлены в шестнадцатеричном формате. Да, двоичный код намного проще в некоторых отношениях, но нам также намного проще читать шестнадцатеричные значения, чем двоичные. Подсчет в шестнадцатеричном формате легко, если вы помните, что есть 16 символов, которые составляют каждый набор чисел.

Как вручную преобразовать шестнадцатеричные значения

В десятичном формате мы все знаем, что мы считаем так. Однако в шестнадцатеричном формате мы учитываем все 16 чисел. Вот несколько примеров некоторых сложных шестнадцатеричных «переходов», которые могут оказаться полезными. Добавление шестнадцатеричных значений очень просто и фактически выполняется очень похоже на подсчет чисел в десятичной системе.

Итак, подведем итог. Шестнадцатеричная система счисления состоит из 10 цифр (от 0 до 9) и 6 букв латинского алфавита (A, B, C, D, E, F). Если к какому-нибудь числу в шестнадцатеричной системе добавим справа нуль, то это число увеличится в 16 раз. Очень важно уяснить данную тему , так как мы будем постоянно использовать ее при написании программ.

Большинство из нас может это сделать в наших головах - вот здесь один из способов взглянуть на это, что полезно. Когда вводятся три цифры, например 123, мы знаем, что мы должны смотреть на все три места, чтобы понять, что они на самом деле означают. Уберите первые два, а 3 все еще. 2 умножается на 10, потому что это вторая цифра в номере, как и в первом примере. Опять же, заберите 1 из этого 123, и вы останетесь с 23, что равно 20. Третье число справа взято раз 10, дважды.

Вот еще два способа взглянуть на это. То же самое верно, если число в тысячах, например 1. Сначала вы должны преобразовать шестнадцатеричные цифры в десятичные, а затем просто добавить числа вместе, как и с двумя приведенными выше примерами. Следующее число слева от него должно быть умножено на 16, что, как и второе число из 123 выше, необходимо чтобы умножить на 10, чтобы сделать число.

Теперь немного о том, как я буду строить примеры на Ассемблере. Не совсем удобно приводить их в HTML-формате, поэтому сперва будет сам код программы с пронумерованными строчками, а сразу же после него объяснения и примечания.

Примерно так:

строк Код программы
(1) mov ah,9

Объяснения:

Наконец, третье число справа нужно умножить на 16, дважды, как десятичное число, нужно умножить на 10, дважды, когда у него три цифры. Хотя хорошо знать, как это сделать вручную, конечно, гораздо проще работать с шестнадцатеричными значениями с калькулятором или конвертером.

Есть много онлайн-шестнадцатеричных конвертеров, которые действительно просты в использовании и являются лишь немногими из них. Одним из примеров будет добавление шестнадцатеричного и двоичного значений вместе, а затем просмотр результата в десятичном формате. Поскольку десятичное число относится к числу 10, а у нас есть десять пальцев и десять пальцев, мы склонны любить использовать числа в группах десятков, встроенных в нашу систему нумерации.

В строке (1) мы делаем то-то, а в строке (15) то-то.

Огромная просьба: НЕ копируйте программы со страницы в буфер, а затем не вставляйте их в Блокнот (или еще куда-нибудь)! Перепечатывайте их вручную в текстовом редакторе. Если есть принтер, то выделите программу, распечатайте выделенный фрагмент, а затем перебейте в редактор с бумаги. Все примеры нужно набирать самостоятельно! Это ускорит запоминание операторов.

Мы можем разбить каждое из этих чисел на кратные степени 10. Если вы предпочитаете экспонентов, также известных как полномочия, вы здесь. Вам даже не нужно беспокоиться о фракциях. Шестнадцатеричный К сожалению, компьютеры не имеют 10 пальцев и 10 пальцев. На самом деле у них вообще нет! Люди, которые делают эти машины, решили, что это слишком сложно сделать компьютер, который может считаться точно так же, как человек. Итак, вместо этого компьютеры используют двоичный код, который мы можем записать в сокращенной форме - шестнадцатеричной.

Шестнадцатеричный, часто называемый шестнадцатеричным, является методом группировки чисел в степени 16 вместо полномочий. Мы можем назвать шестнадцатеричную базу. Самая большая цифра в десятичной форме. Например, чтобы представить девятнадцать, мне нужно поставить номер один и номер девять рядом друг с другом: Итак, десятичные числа используют цифры от 0 до 9, всего десять разных цифр. Но для шестнадцатеричных чисел требуется более десяти цифр. Они должны соответствовать 16 типам чисел в одну цифру.

И еще. Строчные и ПРОПИСНЫЕ буквы в Ассемблере не различаются. Записи вида:

Ассемблером воспринимаются одинаково. Можно, конечно, заставить Ассемблер различать строчные и ПРОПИСНЫЕ символы, но мы пока этого делать не будем. Для удобства чтения программы лучше всего операторы печатать строчными буквами, а названия подпрограмм и меток начинать с прописной. Но это как кому будет удобно.

Чтобы решить эту проблему, шестнадцатеричные числа имеют несколько алфавитных букв, используемых в качестве числовых цифр. Шестнадцатеричные числа. Шестнадцатеричные обозначения В других руководствах, текстовых файлах и программах вы обычно найдете несколько типов обозначений, которые отличают шестнадцатеричные числа от десятичных чисел.

Чтобы убедиться, что кто-то еще знает, что вы говорите о шестнадцатеричных числах, а не о десятичных числах, вы можете использовать вышеупомянутые три обозначения. Это обозначение является одной из наиболее распространенных форм. Все числа считаются шестнадцатеричными числами, если не указано иное.

Итак, переходим к нашей первой программе:

(1) CSEG segment

(2) org 100h

(4) Begin:

(6) mov ah,9

(7) mov dx,offset Message

(8) int 21h

(10) int 20h

(11)

(12) Message db "Hello, world!$"

(13) CSEG ends

(14) end Begin

Для того, чтобы объяснить все операторы данного примера, нам потребуется несколько выпусков. Поэтому описание некоторых команд мы просто опустим на данном этапе. Просто считайте, что так должно быть. В самое ближайшее время мы рассмотрим эти операторы подробно. Итак, строки с номерами (1), (2) и (13) вы просто игнорируете.

В предыдущей статье мы рассмотрели двойную и десятичную системы. Сегодня мы имеем дело с третьей приоритетной системой. Тот или иной лингвист наверняка уже знает: основой для этой платежной системы является 16. И если мы уже немного работаем с двойной и десятичной системой, обучение третьей системе не должно быть слишком сложным.

Если бы мы имели только две цифры, 0 и 1 в двойной системе, шестнадцатеричная система имеет 16 цифр. Но в тот момент мы будем брать цифры только как цифры, как цифра «12» отличается от двух цифр 1 и 2? Устраните здесь, создайте буквы. Таким образом, каждая цифра действительно четко идентифицируется и уникальна. В противном случае платежная система ведет себя так, как известно. Только орфография - это нечто особенное.

Строки (3), (5), (9) и (11) остаются пустыми. Это делается для наглядности. Ассемблер их будет просто опускать.

Теперь перейдем к рассмотрению остальных операторов. Со строки (4) начинается код программы. Это метка, указывающая Ассемблеру на начало кода. В строке (14) стоят операторы end Begin (Begin англ. начало; end конец). Это конец программы. Вообще вместо слова Begin можно было бы использовать что-нибудь другое. Например, Start:. В таком случае, нам пришлось бы и завершать программу End Start (14).

Бинарные и десятичные числа можно отличить относительно легко. Если присутствуют только 0 и 1, число в соответствующем контексте достаточно надежно записано двоичным. В шестнадцатеричном и десятичном значениях опасность больше запутать, потому что не только 2, но и 10 цифр идентичны. Достаточно теории, мы снова начинаем с примера.

Преобразование десятичных чисел в шестнадцатеричные числа также выполняется быстро. Теперь мы объединяем три системы, и мы рассматриваем, как эти системы используются в компьютерах. Начнем с наименьшей единицы: бит. Один бит - это наименьший объем данных, который может обрабатывать компьютер. Это цифра, то есть 0 или От нескольких бит, теперь все остальные структуры.

Строки (6) (8) выводят на экран сообщение Hello, world!. Здесь придется вкратце рассказать о регистрах процессора (более подробно эту тему мы рассмотрим в следующем выпуске).

Регистр процессора это специально отведенная память для хранения какого-нибудь числа.

Например:

Если мы хотим сложить два числа, то в математике запишем так:

Байт может использоваться для отображения чисел от -255 до 255. Чтобы вы могли различать положительный и отрицательный, в качестве цифр можно использовать только 7 бит. Однако в некоторых случаях это правило можно пренебречь в пользу экспоненциально растущего диапазона значений.

Введение в шестнадцатеричную систему

Шестнадцатеричные числа: преобразование, орфография. И, наконец, как всегда, результаты. Они должны быть представлены здесь шаг за шагом. Эти шестнадцатеричные значения всегда начинаются с алмаза #. За ним следуют 3 пары из 2 шестнадцатеричных символов. 3 пары представляют значения цвета в порядке красно-зелено-синего, первый для красного, последний для синего. Как следует из названия, шестнадцатеричная система представляет собой числовую систему на основе 16. Таким образом, 16 символов доступны для каждого символа.

A, B и C это своего рода регистры (если говорить о компьютере), в которых могут хранится некоторые данные. А=5 можно прочитать как: Присваиваем А число 5 .

Для присвоения регистру какого-нибудь значения, в Ассемблере существует оператор mov (от англ. move загрузить). Строку (6) следует читать так: Загружаем в регистр AH число 9 (проще говоря, присваиваем AH число 9). Ниже рассмотрим зачем это надо.

Для каждого отдельного значения цвета есть 2 цифры, шестнадцать - это то же самое, что и для нормальной десятичной системы: если максимум достигнут в одной точке, точка до точки увеличивается на 1. Когда цвет указывается как шестнадцатеричное значение, чем больше значение, тем ярче становится цвет.

Пример применения Цвета как шестнадцатеричное значение. В этом случае десятичные значения могут быть указаны от 0 до 255, разделенные запятой. Порядок идентичен порядку шестнадцатеричной нотации, и также верно следующее: чем больше значение, тем ярче цвет, 255 является максимальным. В качестве альтернативы возможны и процентные данные, но это очень редко.

В строке (7) загружаем в регистр DX адрес сообщения для вывода (в данном примере это будет строка Hello, world!$ ).

Прерывания будут подробно рассматриваться в последующих выпусках. Здесь я скажу несколько слов.

Прерывание MS-DOS это своего рода подпрограмма (часть MS-DOS) , которая находится постоянно в памяти и может вызываться в любое время из любой программы.

Рассмотрим вышесказанное на примере (мелким шрифтом выделим примечания ):

Программа сложения двух чисел

НачалоПрограммы

A=5 в переменную A заносим значение 5

B=8 в переменную B значение 8

ВызовПодпрограммы Сложение

теперь С равно 13

A=10 тоже самое, только другие числа

B=25

ВызовПодпрограммы Сложение

теперь С равно 35

КонецПрограммы

Подпрограмма Сложение

C=A+B

ВозвратИзПодпрограммы возвращаемся в то место, откуда вызывали

КонецПодпрограммы

В данном примере мы дважды вызвали подпрограмму Сложение , которая сложила два числа, переданные ей в переменных A и B. Результат помещается в переменную С. Когда вызывается подпрограмма, компьютер запоминает с какого места она была вызвана, а затем, когда закончила работу подпрограмма, компьютер возвращается в то место, откуда она вызывалась. Т.о. можно вызывать подпрограммы неопределенное количество раз с любого места.

При выполнении строки (8) программы на Ассемблере мы вызываем подпрограмму (в данном случае это называется прерывание), которая выводит на экран строку. Для этого мы, собственно, и помещаем необходимые значения в регистры. Всю необходимую работу (вывод строки, перемещение курсора) берет на себя подпрограмма. Эту строку можно прочитать так: вызываем двадцать первое прерывание (int от англ. interrupt прерывание). Обратите внимание, что после числа 21 стоит буква h. Это, как мы уже знаем, шестнадцатеричное число (33 в десятичной системе). Конечно, нам ничего не мешает заменить строку int 21h на int 33. Программа будет работать корректно. Просто в Ассемблере принято указывать номер прерывания в шестнадцатеричной системе.

В строке (10) мы, как вы уже догадались, вызываем прерывание 20 h. Для вызова данного прерывания не нужно указывать какие-либо значения в регистрах. Оно выполняет только одну задачу: выход из программы (выход в DOS). В результате выполнения прерывания 20h, программа вернется туда, откуда ее запускали (загружали, вызывали). Например, в Norton Commander или DOS Navigator.

Строка (12) содержит сообщение для вывода. Первое слово (message сообщение) название сообщения. Оно может быть любым (например, mess или string и пр.). Обратите внимание на строку (7), в которой мы загружаем в регистр DX адрес нашего сообщения.

Можно создать еще одну строку, которую назовем Mess2. Затем, начиная со строки (9) вставим следующие команды:

(10) mov dx,offset Mess2

(13) Message db "Hello, world!$"

(14) Mess2 db "Это Я! $"

и ассемблировать нашу программу заново. Надеюсь, что вы догадались, что произойдет

Обратите внимание на последний символ в строках Message и Mess2 - $. Он указывает на конец строки. Если мы его уберем, то 21 h прерывание продолжит вывод до тех пор, пока не встретится где-нибудь в памяти символ $. На экране мы увидим мусор .

Если у вас есть отладчик, то можно посмотреть как будет работать наша программа.

Целю настоящего выпуска не было разобраться подробно с каждым оператором . Это невозможно, т.к. у вас еще недостаточно знаний. Я полагаю, что уже через 3-4 выпуска вы поймете принцип и структуру программы на Ассемблере. Может быть, вам показался язык Ассемблера чрезвычайно сложным, но это, поверьте, с первого взгляда.

Рис. 13.1.

Шестнадцатеричная система счисления является для нас первой, чей алфавит включает цифры, не всегда совпадающие по написанию с десятичными - просто цифр в нём больше на шесть. Однако алфавит этой системы в общем случае уместно считать традиционным (см. §2), что означает наличие в нём цифр, изображённых на рис. 13.1. С появлением "новых" цифр (по отношению к привычной десятичной системе) применительно к ним используются названия, доселе недопустимые. Например, мы не могли сказать раньше "цифра десять", или "цифра четырнадцать" (напомним, что всё-таки цифра - это один знак, - см. §23 "Введения в информатику"). Теперь это не только вполне приемлемо, но по-другому эти "новые" цифры можно называть разве что так, как это принято в языках, использующих латинский алфавит.

Итак, цифра A - это цифра "десять", B - "одиннадцать", C - "двенадцать", D - "тринадцать", E - "четырнадцать" и, наконец, F - это "пятнадцать".

Рис. 13.2.

Классическая шестнадцатеричная система является позиционной. Другими словами, по отношению к числам, построенным по её правилам, имеет смысл говорить об их разрядах. Разряды шестнадцатеричных чисел называются так: разряд единиц, разряд шестнадцати, двухсот пятидесяти шести и т. д. Как мы видим, они строятся по названию числа, образованного возведением в очередную степень основания (базы) системы счисления - числа 16. Названия некоторых разрядов целой и дробной частей шестнадцатеричного числа видны из рис. 13.2.

Иногда шестнадцатеричное число не содержит десятичный индекс, обозначающий базу. Вместо него может быть указана латинская буква "H", ставящаяся в конце числа и показывающая, что число записано в шестнадцатеричной форме. Такое обозначение часто используют в профессиональной литературе по информатике. Следует иметь в виду, что H - это замена индекса и никак не цифра! Что, впрочем, кажется вполне естественным, если взглянуть на алфавит системы счисления.

    • Буква "H" есть сокращение английского слова hexadimal , что означает шестнадцатеричное (число) . Другим часто используемым сокращением этого слова является "hex", означающее то же самое (например, оно используется в стандартном приложении операционной системы Windows "Калькулятор", об этом можно прочитать в §1 "Стандартные приложения операционной системы Windows" / "Программа "Калькулятор").

Шестнадцатеричная система счисления одной цифрой описывает содержимое полубайта. Любое же двузначное шестнадцатеричное число удобно представляет содержимое одного байта. По этой причине изучаемая система счисления широко используется в информатике и инженерных дисциплинах, при участии которых разрабатывается цифровая техника.

Будучи тесно связанной с двоичной системой счисления (как, впрочем, и восьмеричная система), она позволяет одним знаком описать текущее значение свойства объекта, если количество возможных значений этого свойства 16, или текущие значения логических свойств объекта, если количество этих свойств 4 и они комбинируются друг с другом.