Система команд микропроцессора
СИСТЕМА КОМАНД МИКРОПРОЦЕССОРА
План
1.Представление информации в компьютере
1.1Системы счисления
1.2Двоичная система счисления
1.3 Шестнадцатеричная система счисления
1.4 Десятичная система счисления
1.5 Перевод чисел из одной системы счисления в другую
2.Структура машинной команды
3.Способы адресации операндов
4.Общая характеристика системы команд
Системы счисления
Как известно, системой счисления называется совокупность правил записи чисел. Системы счисления подразделяются на позиционные и непозиционные. Как позиционные, так и непозиционные системы счисления используют определенный набор символов — цифр, последовательное сочетание которых образует число. Непозиционные системы счисления появились раньше позиционных. Они характеризуются тем, что в них символы, обозначающие то или иное число, не меняют своего значения в зависимости от местоположения в записи этого числа. Классическим примером такой системы счисления является римская. В ней для записи чисел используются буквы латинского алфавита. При этом буква I означает единицу, V — пять, X — десять, L — пятьдесят, С — сто, D — пятьсот, М — тысячу. Для получения количественного эквивалента числа в римской системе счисления необходимо просто просуммировать количественные эквиваленты входящих в него цифр. Исключение из этого правила составляет случай, когда младшая цифра идет перед старшей, — в этом случае нужно не складывать, а вычитать число вхождений этой младшей цифры. К примеру, количественный эквивалент числа 577 в римской системе счисления — это DLXXVII - 500 + 50 + 10 + 10 + 5 + 1 + 1- 577. Другой пример: CDXXIX - 500 - 100 + 10 + 10 - 1 + 10 - 429.
В позиционной системе счисления количество символов в наборе равно основанию системы счисления. Место каждой цифры в числе называется позицией. Номер позиции символа (за вычетом единицы) в числе называется разрядом. Разряд 0 называется младшим разрядом. Каждой цифре соответствует определенный количественный эквивалент. Введем обозначение — запись А(р) будет означать количественный эквивалент числа А, состоящего из п цифр аk (где k = 0, …п-1) в системе счисления с основанием р. Это число можно представить в виде последовательности цифр: А(р) = аn-1аn-2 … а1а0. При этом, конечно, всегда выполняется неравенство аk < р.
В общем случае, количественный эквивалент некоторого положительного числа А в позиционной системе счисления можно представить выражением
где: р — основание системы счисления (некоторое целое положительное число); а — цифра данной системы счисления; n — номер старшего разряда числа.
Для получения количественного эквивалента числа в некоторой позиционной системе счисления необходимо сложить произведения количественных значений цифр на степени основания, показатели которых равны номерам разрядов (обратите внимание, что нумерация разрядов начинается с нуля).
После такого формального введения можно приступить к обсуждению некоторых позиционных систем счисления, наиболее часто используемых при разработке программ на ассемблере.
Двоичная система счисления
Набор цифр для двоичной системы счисления:
{0, 1}, основание степени р = 2.
Количественный эквивалент некоторого целого n-значного двоичного числа вычисляется согласно формуле :
Как мы уже отмечали, наличие этой системы счисления обусловлено тем, что компьютер построен на логических схемах, имеющих в своем элементарном виде только два состояния — включено и выключено. Производить счет в двоичной системе просто для компьютера, но сложно для человека. Например, рассмотрим двоичное число
Вычислим количественный эквивалент этого двоичного числа. Согласно формуле , это будет величина, равная следующей сумме:
1*27 + 0*26 + 1*25 + 0*24 + 0*23 + 1*22 + 1*21 + 1*20.
Сложение и вычитание двоичных чисел (рис. 6.1) выполняется так же, как и для других позиционных систем счисления, например десятичной. Точно так же выполняются заем и перенос единицы из (в) старший разряд. К примеру:
Рис. 6.1. Сложение и вычитание двоичных чисел
Приведем степени двойки (табл. 6.1) и соответствие двоичных чисел и их десятичных и шестнадцатеричных эквивалентов (табл. 6.2).
Таблица 6.1. Степени двойки
Числа со знаком
До сих пор предполагалось, что числа положительные. А как представляются в компьютере числа со знаком?
Ранее, обсуждая типы данных, мы отмечали, что целые числа могут представляться как числа со знаком и без знака. В чем отличие?
Положительные целые со знаком — это 0 и все положительные числа.
Отрицательные целые со знаком — это все числа, меньшие 0. Отличительным признаком числа со знаком является особая трактовка старшего бита поля, представляющего число. В качестве поля могут выступать байт, слово или двойное слово. Естественно, что физически этот бит ничем не отличается от других — все зависит от команды, работающей с данным полем. Если в ее алгоритме заложена работа с целыми числами со знаком, то она будет по-особому трактовать старший бит поля. В случае, если бит равен 0, число считается положительным и его значение вычисляется по правилам, которые мы рассмотрели выше. В случае, если этот бит равен 1, число считается отрицательным и предполагается, что оно записано в так называемом дополнительном коде. Разберемся в том, что он собой представляет.
Дополнительный код некоторого отрицательного числа представляет собой результат инвертирования (замены 1 на 0 и наоборот) каждого бита двоичного числа, равного модулю исходного отрицательного числа, плюс единица. К примеру, рассмотрим десятичное число -18510. Модуль данного числа в двоичном представлении равен 101110012. Сначала нужно дополнить это значение слева нулями до нужной размерности — байта, слова и т. д. В нашем случае дополнить нужно до слова, так как диапазон представления знаковых чисел в байте составляет -128... 127. Следующее действие — получить двоичное дополнение. Для этого все разряды двоичного числа нужно инвертировать:
00000000101110012 → 11111111010001102
Теперь прибавляем единицу:
11111111010001102 + 00000000000000012 = 11111111010001112
Результат преобразования равен 11111111010001112. Именно так и представляется число -18510 в компьютере.
При работе с числами со знаком от нас наверняка потребуется умение выполнять обратное действие — имея двоичное дополнение числа, определить значение его модуля. Для этого необходимо выполнить два действия:
1. Выполнить инвертирование битов двоичного дополнения.
2. К полученному двоичному числу прибавить двоичную единицу.
К примеру, определим модуль двоичного представления числа —18510 = 11111111010001112:
11111111010001112 → инвертируем биты → 00000000101110002.
Добавляем двоичную единицу:
00000000101110002 + 00000000000000012 = 00000000101110012 = |-185|
Теперь должно быть понятно, откуда появилась разница в диапазонах значений для чисел со знаком и без знака простых типов даннях.
Теперь мы почти готовы разговаривать с компьютером на его языке, состоящем из команд и данных. С данными мы уже разобрались, теперь давайте обратимся к командам.
Структура машинной команды
Машинная команда представляет собой закодированное по определенным правилам указание микропроцессору на выполнение некоторых операции или действия. Каждая команда содержит элементы, определяющие:
o что делать? (ответ на этот вопрос дает элемент команды, называемый кодом операции (КОП));
o объекты, над которыми нужно что-то делать (эти элементы называются операндами);
o как делать? (эти элементы называются типами операндов — обычно задаются неявно).
Приведенный на рис. 6.5 формат машинной команды является самым общим. Максимальная длина машинной команды — 15 байт. Реальная команда может содержать гораздо меньшее количество полей, вплоть до одного — только КОП.
Рис. 6.5. Формат машинной команды
Опишем назначения полей машинной команды.
Префиксы. Необязательные элементы машинной команды, каждый из которых состоит из одного байта или может отсутствовать. В памяти префиксы предшествуют команде. Назначение префиксов — модифицировать операцию, выполняемую командой. Прикладная программа может использовать следующие типы префиксов:
Префикс замены сегмента. В явной форме указывает, какой сегментный регистр используется в данной команде для адресации стека или данных. Префикс отменяет выбор сегментного регистра по умолчанию. Префиксы замены сегмента имеют следующие значения: 2eh — замена сегмента cs, 36h — замена сегмента ss, 3eh — замена сегмента ds, 26h — замена сегмента es, 64h — замена сегмента fs, 65h — замена сегмента gs.
Префикс разрядности адреса уточняет разрядность адреса (32 или 16-разрядный). Каждой команде, в которой используется адресный операнд, ставится в соответствие разрядность адреса этого операнда. Этот адрес может иметь разрядность 16 или 32 бит. Если разрядность адреса для данной команды 16 бит, это означает, что команда содержит 16-разрядное смещение (см. рис. 6.5) и оно соответствует 16-разрядному смещению адресного операнда относительно начала некоторого сегмента. В контексте рис. 2.3 это смещение называется эффективным адресом. Если разрядность адреса 32 бит, это означает, что команда содержит 32-разрядное смещение (см. рис. 6.5), оно соответствует 32-разрядному смещению адресного операнда относительно начала сегмента и по его значению формируется 32-битное смещение в сегменте. С помощью префикса разрядности адреса можно изменить действующее по умолчанию значение разрядности адреса. Это изменение будет касаться только той команды, которой предшествует префикс.
Префикс разрядности операнда аналогичен префиксу разрядности адреса, но указывает на разрядность операндов (32 или 16-разрядные), с которыми работает команда. В соответствии с какими правилами устанавливаются значения атрибутов разрядности адреса и операндов по умолчанию? В реальном режиме и режиме виртуального i8086 значения этих атрибутов — 16 бит. В защищенном режиме значения атрибутов зависят от состояния бита D в дескрипторах исполняемых сегментов. Если D = 0, то значения атрибутов, действующие по умолчанию, равны 16 бит; если D = 1, то 32 бит. Значения префиксов разрядности операнда 66h и разрядности адреса 67h. Мы можем с помощью префикса разрядности адреса в реальном режиме использовать 32-разрядную адресацию, но при этом необходимо помнить об ограниченности размера сегмента величиной 64 Кбайт. Аналогично префиксу разрядности адреса вы можете использовать префикс разрядности операнда в реальном режиме для работы с 32-разрядными операндами (к примеру, в арифметических командах).
Префикс повторения используется с цепочечными командами (командами обработки строк). Этот префикс «зацикливает» команду для обработки всех элементов цепочки. Система команд поддерживает два типа префиксов: безусловные (rep — 0f3h), заставляющие повторяться цепочечную команду некоторое количество раз, и условные (repe/repz - 0f3h, repne/repnz - 0f2h), которые при зацикливании проверяют некоторые флаги, — и в результате проверки возможен досрочный выход из цикла.
Код операции. Обязательный элемент, описывающий операцию, выполняемую командой. Многим командам соответствует несколько кодов операций, каждый из которых определяет нюансы выполнения операции.
Последующие поля машинной команды определяют местоположение операндов, участвующих в операции, и особенности их использования. Рассмотрение этих полей связано со способами задания операндов в машинной команде и потому будет выполнено ниже.
Байт режима адресации modr/m. Значение этого байта определяет используемую форму адреса операндов. Операнды могут находиться в памяти, в одном или двух регистрах. Если операнд находится в памяти, то байт modr/m определяет компоненты (смещение, базовый и индексный регистры), используемые для вычисления его эффективного адреса. В защищенном режиме для определения местоположения операнда в памяти может дополнительно использоваться байт sib (Scale-Index-Base — масштаб-индекс-база). Байт modr/m состоит из трех полей:
o поле mod определяет количество байт, занимаемых в команде адресом операнда (см. рис. 6.5, поле смещение в команде). Поле mod используется совместно с полем r/m, которое указывает способ модификации адреса операнда смещение в команде. К примеру, если mod = 00, это означает, что поле смещение в команде отсутствует и адрес операнда определяется содержимым базового и (или) индексного регистра. Какие именно регистры будут использоваться для вычисления эффективного адреса, определяется значением этого байта. Если mod = 01, это означает, что поле смещение в команде присутствует, занимает один байт и модифицируется содержимым базового и (или) индексного регистра. Если mod = 10, это означает, что поле смещение в команде присутствует, занимает два или четыре байта (в зависимости от действующего по умолчанию или определяемого префиксом размера адреса) и модифицируется содержимым базового и (или) индексного регистра. Если mod = 11, это означает, что операндов в памяти нет; они находятся в регистрах. Это же значение байта mod используется в случае, когда в команде применяется непосредственный операнд;
o поле reg/коп определяет либо регистр, находящийся в команде на месте первого операнда, либо возможное расширение кода операции;
o поле r/m используется совместно с полем mod и определяет либо регистр, находящийся в команде на месте первого операнда (если mod = 11), либо используемые для вычисления эффективного адреса (совместно с полем смещение в команде) базовые и индексные регистры.
Байт масштаб-индекс-база (байт sib) используется для расширения возможностей адресации операндов. На наличие байта sib в машинной команде указывает сочетание одного из значений 01 или 10 поля mod и значения поля r/m = 100. Байт sib состоит из трех полей:
o поле масштаба ss. В этом поле размещается масштабный множитель для индексного компонента index, занимающего следующие три бита байта sib. В поле ss может содержаться одно из следующих значений: 1, 2, 4, 8. При вычислении эффективного адреса на это значение будет умножаться содержимое индексного регистра. Более подробно с практической точки зрения эта расширенная возможность индексации рассматривается позже при обсуждении вопросов работы с массивами;
o поле index используется для хранения номера индексного регистра, который применяется для вычисления эффективного адреса операнда;
o поле base используется для хранения номера базового регистра, который также применяется для вычисления эффективного адреса операнда. Вспомним, что в качестве базового и индексного регистров могут использоваться практически все регистры общего назначения.
Поле смещения в команде. 8, 16 или 32-разрядное целое число со знаком, представляющее собой, полностью или частично (с учетом вышеприведенных рассуждений), значение эффективного адреса операнда.
Поле непосредственного операнда. Необязательное поле, представляющее собой 8,16 или 32-разрядный непосредственный операнд. Наличие этого поля, конечно, отражается на значении байта mod r/m.
Способы задания операндов команды
В ходе предыдущих лекций мы поневоле касались вопроса о том, где располагаются операнды, с которыми работает машинная команда, и как это отражается на содержимом ее полей. В этой лекции рассмотрим этот вопрос более систематизированно и в полном объеме. Это позволит нам уже со следующей лекции перейти непосредственно к практическим вопросам программирования на языке ассемблера.
Операнд задается неявно на микропрограммном уровне. В этом случае команда явно не содержит операндов. Алгоритм выполнения команды использует некоторые объекты по умолчанию (регистры, флаги в eflags и т. д.). Например, команды cli и sti неявно работают с флагом прерывания if в регистре eflags, а команда xlat неявно обращается к регистру а1 и строке в памяти по адресу, определяемому парой регистров ds:bx.
Операнд задается в самой команде (непосредственный операнд). Операнд находится в коде команды, то есть является ее частью. Для хранения такого операнда в команде выделяется поле длиной до 32 бит (см. рис. 6.5). Непосредственный операнд может быть только вторым операндом (источником). Операнд-получатель может находиться либо в памяти, либо в регистре. Например, mov ax,0ffffh пересылает в регистр ах шестнадцатеричную константу ffff. Команда add sum,2 складывает содержимое поля по адресу sum с целым числом 2 и записывает результат по месту первого операнда, то есть в память.
Операнд находится в одном из регистров. Регистровые операнды указываются именами регистров. В качестве регистров могут использоваться:
o 32-разрядные регистры ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ESP, EBP;
o 16-разрядные регистры АХ, ВХ, СХ, DX, SI, DI, SP, ВР;
o 8-разрядные регистры АН, AL, ВН, BL, CH, CL, DH, DL;
o сегментные регистры CS, DS, SS, ES, FS, GS.
Например, команда add ax,bx складывает содержимое регистров ах и bх и записывает результат в bх. Команда dec si уменьшает содержимое si на 1.
Операнд располагается в памяти. Это наиболее сложный и в то же время наиболее гибкий способ задания операндов. Он позволяет реализовать следующие два основных вида адресации: прямую адресацию и косвенную адресацию.
В свою очередь, косвенная адресация имеет следующие разновидности:
o косвенная базовая адресация; другое ее название — регистровая косвенная адресация;
o косвенная базовая адресация со смещением;
o косвенная индексная адресация со смещением;
o косвенная базовая индексная адресация;
o косвенная базовая индексная адресация со смещением.
Операндом является порт ввода/вывода. Как уже отмечалось, помимо адресного пространства оперативной памяти микропроцессор поддерживает адресное пространство ввода-вывода, которое используется для доступа к устройствам ввода-вывода. Объем адресного пространства ввода-вывода составляет 64 Кбайт. Для любого устройства компьютера в этом пространстве выделяются адреса. Конкретное значение адреса в пределах этого пространства называется портом ввода-вывода. Физически порту ввода-вывода соответствует аппаратный регистр (не путать с регистром микропроцессора), доступ к которому осуществляется с помощью специальных команд ассемблера in и out. Например:
in al. 60h ; ввести байт из порта 60h
Регистры, адресуемые с помощью порта ввода-вывода, могут иметь разрядность 8, 16 или 32 бит, но для конкретного порта разрядность регистра фиксирована. Команды in и out работают с фиксированной номенклатурой объектов. В качестве источника информации или получателя применяются так называемые регистры-аккумуляторы еах, ах, al. Выбор регистра определяется разрядностью порта. Номер порта может задаваться непосредственным операндом в командах in и out или значением в регистре dx. Последний способ позволяет динамически определить номер порта в программе. Например:
Операнд находится в стеке.
Команды могут совсем не иметь операндов, иметь один или два операнда. Большинство команд требуют двух операндов, один из которых является операндом-источником, а второй — операндом назначения. Важно то, что один операнд может располагаться в регистре или памяти, а второй операнд обязательно должен находиться в регистре или непосредственно в команде. Непосредственный операнд может быть только операндом-источником.
В двухоперандной машинной команде возможны следующие сочетания операндов:
o регистр—регистр;
o регистр—память;
o память—регистр;
o непосредственный операнд—регистр;
o непосредственный операнд—память.
Для данного правила есть исключения, которые касаются:
o команд работы с цепочками, которые могут перемещать данные из памяти в память;
o команд работы со стеком, которые могут переносить данные из памяти в стек, также находящийся в памяти;
o команд типа умножения, которые кроме операнда, указанного в команде, используют еще и второй, неявный операнд.
Из перечисленных сочетаний операндов наиболее часто употребляются регистр-память и память—регистр. Ввиду их важности рассмотрим их подробнее. Обсуждение мы будем сопровождать примерами команд ассемблера, которые будут показывать, как изменяется формат команды ассемблера при применении того или иного вида адресации. В связи с этим посмотрите еще раз на рис. Предыдущей лекции, на котором показан принцип формирования физического адреса на адресной шине микропроцессора. Видно, что адрес операнда формируется как сумма двух составляющих — сдвинутого на 4 бит содержимого сегментного регистра и 16-битного эффективного адреса, который в общем случае вычисляется как сумма трех компонентов: базы, смещения и индекса.
Рассмотрим особенности основных видов адресации операндов в памяти.
Прямая адресация
Это простейший вид адресации операнда в памяти, так как эффективный адрес содержится в самой команде и для его формирования не используется никаких дополнительных источников или регистров. Эффективный адрес берется непосредственно из поля смещения машинной команды (см. рис. 6.5), которое может иметь размер 8, 16, 32 бит. Это значение однозначно определяет байт, слово или двойное слово, расположенные в сегменте данных.
Прямая адресация может быть двух типов:
o Относительная прямая адресация. Используется для команд условных переходов, для указания относительного адреса перехода. Относительность такого перехода заключается в том, что в поле смещения машинной команды содержится 8, 16 или 32-битное значение, которое в результате работы команды будет складываться с содержимым регистра указателя команд ip/eip. В результате такого сложения получается адрес, по которому и осуществляется переход.
К примеру:
Несмотря на то, что в команде указана некоторая метка в программе, ассемблер вычисляет смещение этой метки относительно следующей команды (в нашем случае это mov al,2) и подставляет его в формируемую машинную команду jс.
o Абсолютная прямая адресация. В этом случае эффективный адрес является частью машинной команды, но формируется этот адрес только из значения поля смещения в команде. Для формирования физического адреса операнда в памяти микропроцессор складывает это поле со сдвинутым на 4 бит значением сегментного регистра. В команде ассемблера можно использовать несколько форм такой адресации. К примеру:
Но такая адресация применяется редко; обычно используемым ячейкам в программе присваиваются символические имена. В процессе трансляции ассемблер вычисляет и подставляет значения смещений этих имен в формируемую им машинную команду в поле смещение в команде (см. рис. 6.5). В итоге получается так, что машинная команда прямо адресует свой операнд, имея, фактически, в одном из своих полей значение эффективного адреса. К примеру:
Мы получим тот же результат, что и при использовании команды
mov ax.dword ptr [0000]
Остальные виды адресации относятся к косвенным. Слово «косвенный» в названии этих видов адресации означает то, что в самой команде может находиться лишь часть эффективного адреса, а остальные его компоненты находятся в регистрах, на которые указывают своим содержимым байт modr/m и, возможно, байт sib.
Часть 1.
По ПЗ №3 составить 5 тестовых вопросов (по пп..2 – 4).
Часть 2.
1.На дату выполнения ПЗ №3 определить точное количество дней, которые прожили вы, ваши родители, братья и сестры, бабушки и дедушки, двоюродные (всего 10 родственников). (Подсказка - вспомните MS EXCEL).
2. По схеме, изложенной в материале ПЗ №3, переведете эти числа (десятичные) по каждому родственнику в двоичный код, в 16-ричный код, в отрицательное число (дополнительный код).
По двум (любым) родственникам в отчете представить подробную наглядную схему всех переводов из одной системы в другую.
3. Результаты представьте в виде таблицы:
Название родственника | Дата рождения (дата,месяц,год) | Дата выполнения ПЗ №3 (дата,месяц,год) | Кол-во дней в 10-й системе счисления | Кол-во дней в 2-й системе счисления | Кол-во дней в 16-й системе счисления | Кол-во дней в дополнительном коде |
1.Я | ||||||
… | ||||||
10. |
СИСТЕМА КОМАНД МИКРОПРОЦЕССОРА
План
1.Представление информации в компьютере
1.1Системы счисления
1.2Двоичная система счисления
1.3 Шестнадцатеричная система счисления
1.4 Десятичная система счисления
1.5 Перевод чисел из одной системы счисления в другую
2.Структура машинной команды
3.Способы адресации операндов
4.Общая характеристика системы команд
Системы счисления
Как известно, системой счисления называется совокупность правил записи чисел. Системы счисления подразделяются на позиционные и непозиционные. Как позиционные, так и непозиционные системы счисления используют определенный набор символов — цифр, последовательное сочетание которых образует число. Непозиционные системы счисления появились раньше позиционных. Они характеризуются тем, что в них символы, обозначающие то или иное число, не меняют своего значения в зависимости от местоположения в записи этого числа. Классическим примером такой системы счисления является римская. В ней для записи чисел используются буквы латинского алфавита. При этом буква I означает единицу, V — пять, X — десять, L — пятьдесят, С — сто, D — пятьсот, М — тысячу. Для получения количественного эквивалента числа в римской системе счисления необходимо просто просуммировать количественные эквиваленты входящих в него цифр. Исключение из этого правила составляет случай, когда младшая цифра идет перед старшей, — в этом случае нужно не складывать, а вычитать число вхождений этой младшей цифры. К примеру, количественный эквивалент числа 577 в римской системе счисления — это DLXXVII - 500 + 50 + 10 + 10 + 5 + 1 + 1- 577. Другой пример: CDXXIX - 500 - 100 + 10 + 10 - 1 + 10 - 429.
В позиционной системе счисления количество символов в наборе равно основанию системы счисления. Место каждой цифры в числе называется позицией. Номер позиции символа (за вычетом единицы) в числе называется разрядом. Разряд 0 называется младшим разрядом. Каждой цифре соответствует определенный количественный эквивалент. Введем обозначение — запись А(р) будет означать количественный эквивалент числа А, состоящего из п цифр аk (где k = 0, …п-1) в системе счисления с основанием р. Это число можно представить в виде последовательности цифр: А(р) = аn-1аn-2 … а1а0. При этом, конечно, всегда выполняется неравенство аk < р.
В общем случае, количественный эквивалент некоторого положительного числа А в позиционной системе счисления можно представить выражением
где: р — основание системы счисления (некоторое целое положительное число); а — цифра данной системы счисления; n — номер старшего разряда числа.
Для получения количественного эквивалента числа в некоторой позиционной системе счисления необходимо сложить произведения количественных значений цифр на степени основания, показатели которых равны номерам разрядов (обратите внимание, что нумерация разрядов начинается с нуля).
После такого формального введения можно приступить к обсуждению некоторых позиционных систем счисления, наиболее часто используемых при разработке программ на ассемблере.
Двоичная система счисления
Набор цифр для двоичной системы счисления:
{0, 1}, основание степени р = 2.
Количественный эквивалент некоторого целого n-значного двоичного числа вычисляется согласно формуле :
Как мы уже отмечали, наличие этой системы счисления обусловлено тем, что компьютер построен на логических схемах, имеющих в своем элементарном виде только два состояния — включено и выключено. Производить счет в двоичной системе просто для компьютера, но сложно для человека. Например, рассмотрим двоичное число
Вычислим количественный эквивалент этого двоичного числа. Согласно формуле , это будет величина, равная следующей сумме:
1*27 + 0*26 + 1*25 + 0*24 + 0*23 + 1*22 + 1*21 + 1*20.
Сложение и вычитание двоичных чисел (рис. 6.1) выполняется так же, как и для других позиционных систем счисления, например десятичной. Точно так же выполняются заем и перенос единицы из (в) старший разряд. К примеру:
Рис. 6.1. Сложение и вычитание двоичных чисел
Приведем степени двойки (табл. 6.1) и соответствие двоичных чисел и их десятичных и шестнадцатеричных эквивалентов (табл. 6.2).
Таблица 6.1. Степени двойки