assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 17
Текст из файла (страница 17)
Непозиционные системы счисления появились раньше позиционных. Онихарактеризуются тем, что в них символы, обозначающие то или иное число (тоесть цифры), не меняют своего значения в зависимости от местоположения в записи этого числа. Классическим примером такой системы счисления является римская. В ней для записи чисел используются буквы латинского алфавита. При этомбуква I означает единицу, V — пять, X — десять, L — пятьдесят, С — сто, D — пятьсот, М — тысячу.
Для получения количественного эквивалента числа в римскойсистеме счисления необходимо просто просуммировать количественные эквиваленты входящих в него цифр. Исключение из этого правила составляет случай,когда младшая цифра находится перед старшей, — в этом случае нужно не складывать, а вычитать число вхождений этой младшей цифры.
Например:Двоичная система счисления75DLXXVII = 500 + 50 + 10 + 10 + 5 + 1 + 1 = 577.Другой пример:CDXXIX = 500 - 100 + 10 + 10 - 1 + 10 = 429.В позиционной системе счисления количество символов в наборе равно основанию системы счисления. Место каждой цифры в числе называется позицией.Номер позиции символа (за вычетом единицы) в числе называется разрядом.
Разряд 0 называется младшим разрядом. Каждой цифре соответствует определенныйколичественный эквивалент. Введем обозначение — запись А^,) будет означать количественный эквивалент числа А, состоящего из п цифр ak (где k = 0, ..., п - 1)в системе счисления с основанием р. Это число можно представить в виде последовательности цифр:A w - an_tan_2... аруПри этом, конечно, всегда выполняется неравенство ak < р.В общем случае количественный эквивалент некоторого положительного числа А в позиционной системе счисления можно представить выражением:А=(Р)«„-i -Р"'1 + а^'Р"~2 + ~- + al-pl + a0-pa,(4.1)где р — основание системы счисления (некоторое целое положительное число),а — цифра данной системы счисления, п — номер старшего разряда числа.Для получения количественного эквивалента числа в некоторой позиционнойсистеме счисления необходимо сложить произведения количественных значенийцифр на степени основания, показатели которых равны номерам разрядов (обратите внимание на то, что нумерация разрядов начинается с нуля).После такого формального введения можно приступить к обсуждению некоторых позиционных систем счисления, наиболее часто используемых при разработке программ на ассемблере.Двоичная система счисленияНабор цифр для двоичной системы счисления — {0,1}, основание степени (р) — 2.Количественный эквивалент некоторого целого n-значного двоичного числавычисляется согласно формуле (4.1):А(2) - «„-1' 2"-' + в я _ 2 ' 2-> +..- + v 2' + V 2°.(4-2)Как мы уже отмечали, наличие этой системы счисления обусловлено тем, чтокомпьютер построен на логических схемах, имеющих в своем элементарном видетолько два состояния — включено и выключено.
Производить счет в двоичной системе просто для компьютера, но сложно для человека. Например, рассмотримдвоичное число 10100111.Вычислим десятичный эквивалент этого двоичного числа. Согласно формуле(4.2), это будет величина, равная следующей сумме:1 • Т + 0 • 26 + 1 • 25 + 0 • 24 + 0 • 23 + 1 • 22 + 1 • 21 + 1 • 2°.Посчитайте сами, сколько получится.Сложение и вычитание двоичных чисел (рис. 4.1) выполняется так же, как и вдругих позиционных системах счисления, например десятичной.
Точно так жевыполняется заем (перенос) единицы из старшего разряда (в старший разряд).76Глава 4. Системы счисления11111111100110111100101011 11заем1101001001100111011011переносf110011000010010111000Рис. 4.1. Сложение и-вычитание двоичных чиселПриведем степени двойки (табл. 4.1).Таблица 4.1. Степени двойкиСтепень1Два в указанной степени22434853267648925651216128101024112048124096Шестнадцатеричная система счисленияШестнадцатеричная система счисления имеет набор цифр {0,1, 2,..., 9, А, В, С, D,Е, F} и основание степени (р) — 16.Количественный эквивалент некоторого целого «-значного шестнадцатеричногочисла вычисляется согласно формуле (4.1):А(,6) ° «,-, '16"~'+°п -2 '162"~ +•" + «, '16' + «О '16°-К примеру, количественный эквивалент шестнадцатеричного числа f45ed23cравен:76543215 • 16 + 4 • 16 + 5 • 16 + 14 • 16 + 13 • 16 + 2 • 16 + 3 • 16' + 12 • 16°.Посчитайте сами, сколько получится.
Приведем соответствие двоичных чисели их десятичных и шестнадцатеричных эквивалентов (табл. 4.2).Таблица 4.2. Шестнадцатеричные цифрыДесятичное числоДвоичная тетрада000001000120010Шестнадцатеричное число0Г12Десятичная система счисленияДесятичное числоДвоичная тетрадаШестнадцатеричное число3ООП34010045010156оно6701117810008910019101010А, а111011В,Ь121100С, с131101D,d141110Е,е151111F,f16100001077Поначалу запомнить эти соотношения сложно, поэтому полезно иметь под руками некоторую справочную информацию. Табл.
4.2 содержит представлениядесятичных чисел из диапазона 0-16 в двоичной и шестнадцатеричной системахсчисления. Ее удобно использовать для взаимного преобразования чисел в рассматриваемых нами трех системах счисления. Шестнадцатеричная система счисления при вычислениях несколько сложнее, чем двоичная, в частности, в том, чтокасается правил переносов в старшие разряды (заемов из старших разрядов). Главное здесь — помнить следующее равенство:<1 + F-10) 16 .Эти переходы очень важны при выполнении сложения и вычитания шестнадцатеричных чисел (рис. 4.2).11переносЕ F 1 5 1 слагаемоенС 1 Е 8 2 слагаемое1 В0FDрезультат11BCD85EF4заемуменьшаемоевычитаемое5DE4результатРис.
4.2. Сложение и вычитание шестнадцатеричных чиселДесятичная система счисленияДесятичная система счисления наиболее известна, так как она постоянно используется нами в повседневной жизни. Данная система счисления имеет набор цифр{О, 1, 2, 3,4, 5, 6, 7, 8, 9} и основание степени (р) - 10.Количественный эквивалент некоторого целого и-значного десятичного числавычисляется согласно формуле (4.1):78Глава 4. Системы счисленияА1ао> - «_, ' Ю- + ай_2 • 10-' + ...
+ GI • 10' + а0 • 10°.К примеру, значение числа А (|0) = 4523 равно:Перевод чисел из одной системысчисления в другуюОдного знания о существовании разных систем счисления мало. Для того чтобыв полной мере использовать их в своей практической работе при программировании на ассемблере, необходимо научиться выполнять взаимное преобразованиечисел между тремя системами счисления. Этим мы и займемся в дальнейшем. Кроме того, дополнительно будут рассмотрены некоторые особенности процессоровIntel при работе с числами со знаком.Перевод в десятичную систему счисленияПеревод в десятичную систему счисления является самым простым.
Обычно егопроизводят с помощью так называемого алгоритма замещения, суть которого заключается в следующем: сначала в десятичную систему счисления переводится основание степени р, а затем — цифры исходного числа. Результаты подставляютсяв формулу (4.1).
Полученная сумма и будет искомым результатом. Неявно приобсуждении двоичной и шестнадцатеричной систем счисления мы производиликак раз такое преобразование.Перевод в двоичную систему счисленияПеревод из десятичной системы счисленияПеревод числа в двоичную систему счисления из десятичной выполняется по описанному далее алгоритму.1.
Разделить десятичное число А на 2. Запомнить частное q и остаток а.2. Если в результате шага 1 частное q не равно 0, то принять его за новое делимоеи отметить остаток а, который будет очередной значащей цифрой числа, и вернуться к шагу 1, на котором в качестве делимого (десятичного числа) участвуетполученное на шаге 2 частное.3. Если в результате шага 1 частное q равно 0, алгоритм прекращается. Выписатьостатки в порядке, обратном их получению. Получится двоичный эквивалентисходного числа.К примеру, перевод в двоичную систему счисления числа 247)0 иллюстрируетрис. 4.3. Порядок обхода остатков для получения результата (111101112) показанстрелками.Перевод из шестнадцатеричной системы счисленияПеревод из шестнадцатеричной системы счисления мы уже обсуждали ранее. Сутьего заключается в последовательной замене шестнадцатеричных цифр соответствующими двоичными тетрадами, согласно табл.
4.2. К примеру, двоичное ч[исло, соответствующее числу e4d516, равно 1110 0100 1 101 01012.Перевод чисел из одной системы счисления в другую79Рис. 4.3. Перевод в двоичную систему счисленияПеревод в шестнадцатеричнуюсистему счисленияПеревод из десятичной системы счисленияОбщая идея алгоритма перевода из десятичной системы счисления в шестнадцатеричную аналогична рассмотренной ранее в алгоритме перевода в двоичную систему счисления из десятичной.1. Разделить десятичное число А на 16. Запомнить частное q и остаток а.2. Если в результате шага 1 частное q не равно 0, то принять его за новое делимое,записать остаток и вернуться к шагу 1.3.
Если частное q равно 0, прекратить работу алгоритма. Выписать остатки в порядке, обратном их получению. Получится шестнадцатеричный эквивалентисходного десятичного числа.К примеру, перевод в шестнадцатеричную систему счисления числа 32 767шиллюстрирует рис. 4.4. Порядок обхода остатков для получения результата (7fff 16 )показан стрелками.'<D(2}Рис. 4.4.