assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 18
Текст из файла (страница 18)
Перевод в шестнадцатеричную систему счисления80Глава 4. Системы счисленияПеревод из двоичной системы счисленияИдея алгоритма состоит в том, что двоичное число разбивается на тетрады начиная с младшего разряда. Далее каждая тетрада приводится к соответствующемушестнадцатеричному числу, согласно табл. 4.2.К примеру, пусть требуется перевести в шестнадцатеричную систему счисления следующее число:111001011010111101011000110110001111010101011012.Разобьем его на тетрады:0111 0010 1101 0111 1010 11000110 11000111 1010 1010 1101.По тетрадам приводим последовательности нулей и единиц к шестнадцатеричному представлению:72d7ac6c7aad.То есть в результате преобразования мы получим шестнадцатеричное число72d7ac6c7aad1(i.Перевод дробных чиселПрограммист должен уметь выполнять перевод в различные системы счисленияне только целых чисел, но и дробных чисел.
Особенно важно это при программировании алгоритмов, использующих операции с плавающей точкой. Без владенияв полной мере знаниями о том, как представляются дробные числа в памяти компьютера и в регистрах сопроцессора, вам вряд ли удастся овладеть программированием на ассемблере в полной мере. Давайте разберемся с наиболее часто используемыми на практике способами перевода дробных чисел. Для этого формулу (4.1)преобразуем к следующему виду:\,Га^-Р"1+а„-2-Р"2 + -...+ at-pl + а0-р" + а_, • р~1 + а 2-р2 + ... + а т-р~т.Рассмотрим операции перевода чисел па примерах.(4.3)Пример 1Пусть требуется перевести в десятичное представление следующее дробное число, заданное в двоичной системе счисления:110100,010010112.Для перевода используем формулу (4.3):110100,010010112= 1 - 2 3 + 1 - 2 4 + 0 - 2 3 + 1 • 22 + 0 • 2 1 + 0 • 2° + 0 • 2 ~ ' +2345G7+ 1 • 2- + 0 • 2- + 0 • 2~ + 1 • 2- + 0 • 2- + 1 • 2" + 1 • 2~8.Для вас не составит труда вычислить целую часть десятичной дроби:54321 .
2 + 1 . 2 + 0 • 2 + 1 • 2 + 0 • 2' + 0 • 2°.Для вычисления остальной части выражения удобно использовать табл. 4.3.Перевод чисел из одной системы счисления в другую81Таблица 4.3. Значения отрицательных степеней по основанию числа 2Отрицательная степеньДва в указанной степени10,520,2530,12540,062550,0312560,015625.70,0078125Вы можете сами продолжить табл. 4.3 значениями отрицательных степеней пооснованию числа 2 и в конце концов подсчитать результат перевода в десятичноепредставление значения110100,010010112.Пример 2Пусть требуется перевести в десятичное представление следующую дробь, заданную в шестнадцатеричной системе счисления:Idf2,ale4 |6 .Вновь используем формулу (4.3):Idf2,ale4 16 = 1 • 163 + 13 • 162 + 15 • 2 1 + 2 • 16" + 10 •+ 1 • 16 2 ++ 14- 16-3 + 4 - 16ЛДля удобства вычисления дробной части приведем значения отрицательныхстепеней числа 16 (табл.
4.4).Таблица 4.4. Значения отрицательных степеней по основанию числа 16Отрицательная степеньШестнадцать в указанной степени10,062520,0039062530,00024414062540,0000'! 5258789062550,0000009536743164062560,00000005960464477539062570,0000000037252902984619140625Перевод из двоичной системы счисления в шестнадцатеричную и обратно выполняется, как обычно, на основе тетрад и трудности вызывать не должен.82Глава 4. Системы счисленияПример 3Рассмотрим теперь проблему представления десятичных дробей в двоичной и шестнадцатеричной системах счисления:Общий алгоритм перевода десятичной дроби в другую систему счисления можнопредставить следующей последовательностью тагов.1.
Выделить целую часть десятичной дроби и выполнить ее перевод в выбраннуюсистему счисления по алгоритмам, рассмотренным ранее.2. Выделить дробную часть и умножить ее на основание выбранной новой системы счисления.3. Bv полученной после умножения дробной части десятичной дроби выделитьцелую часть и принять ее в качестве значения первого после запятой разрядачисла в новой системе счисления.4. Если дробная часть значения, полученного после умножения, равна нулю, топрекратить процесс перевода. Процесс перевода можно прекратить также в случае, если достигнута необходимая точность вычисления.
В противном случаевернуться к шагу 3.Рассмотрим пример. Пусть требуется перевести в двоичную систему счисления десятичную дробь 108,40610.Сначала переведем целую часть десятичной дроби 108,40610 в двоичную систему счисления (рис. 4.5).Рис. 4.5. Перевод целой части десятичного числа 108,406 в двоичную систему счисленияЗатем переведем дробную часть десятичного числа 108,40610 (рис.
4.6) по приведенному ранее алгоритму.Результат перевода следующий:108,40610 = 1101100,011001111.При переводе дробного числа из десятичной системы счисления в шестнадцатеричную целесообразно предварительно перевести число в двоичную! систему,а затем двоичное представление разбить на тетрады отдельно до разделительнойПеревод чисел из одной системы счисления в другую83.406.972Рис. 4.6. Перевод дробной части числа 108,406 в двоичную систему счислениязапятой и после запятой.
Разбиение на тетрады двоичных разрядов целой частипроизводят от запятой в сторону старших разрядов. Неполную старшую тетрадудополняют слева нулями. Разряды дробной части, напротив, разбивают на тетрадыот запятой вправо к младшим разрядам. Если последняя тетрада неполная, то ее дополняют нулями справа. На рис. 4.7 показан процесс перевода того же дробного десятичного числа (108,40610) в эквивалентное шестнадцатеричное представление.108,406 = 110 1100, 01100111 1= 6с,678(о)ио 1100, 01100111 1 (ооо)8Рис. 4.7. Пример перевода десятичного числа в шестнадцатеричную систему счисленияПеревод чисел со знакомДо сих пор предполагалось, что числа положительные.
А как представляютсяв компьютере числа со знаком?Положительные целые со знаком — это 0 и все положительные числа.Отрицательные целые со знаком — это все числа, меньшие 0. Отличительнымпризнаком числа со знаком является особая трактовка старшего бита поля, представляющего число.
В качестве поля могут выступать байт, слово или двойное слово.Естественно, что физически этот бит ничем не отличается от других — все зависит откоманды, работающей с данным полем. Если в ее алгоритме заложена возможностьработы с целыми числами со знаком, то команда будет по-особому трактовать старший бит поля. Если старший бит равен 0, число считается положительным и его значение вычисляется по правилам, которые мы рассмотрели ранее.
Если старший битравен 1, число считается отрицательным, а это предполагает, что оно записано в такназываемом дополнительном коде. Разберемся в том, что он собой представляет.84Глава 4. Системы счисленияДополнительный код некоторого отрицательного числа представляет собойрезультат инвертирования (замены 1 на 0 и наоборот) каждого бита двоичногочисла, равного модулю" исходного отрицательного числа плюс единица. К примеру, рассмотрим десятичное число -18510. Модуль данного числа в двоичном представлении равен 101 1 10012. Сначала нужно дополнить это значение слева нулямидо нужной размерности — байта, слова и т. д. В нашем случае дополнить нужнодо слова, так как диапазон представления знаковых чисел в байте составляет-128...127. Следующее действие — получить двоичное дополнение.
Для этого всеразряды двоичного числа нужно инвертировать:000000001011 10012-> 111 111 11010001 102.Теперь прибавляем единицу:1111 11 1 1010001 102 + 00000000000000012 = 11111 11 1010001 112.Результат преобразования равен 11111111010001112. Именно так и представляется число -185Ш в компьютере.При работе с числами со знаком от вас наверняка потребуется умение выполнять обратное действие — имея двоичное дополнение числа, определить значениеего модуля. Для этого необходимо выполнить два действия.1.
Выполнить инвертирование битов двоичного дополнения.2. К полученному двоичному числу прибавить двоичную единицу.К примеру, определим модуль двоичного представления числаСначала инвертируем биты:ИНН 11010001 112-> 00000000101 110002.Добавляем двоичную единицу:0000000010 1110002 + 00000000000000012 = 00000000101 110012 = |-185|.Теперь мы готовы разговаривать с компьютером на его языке, состоящем изкоманд и данных. В следующей главе мы напишем первую программу на ассемблере, разбирая которую, мы сможем применить знания, полученные в этой и предыдущих главах.Итогиж Системы счисления подразделяются на позиционные и непозиционные.
Какв позиционных, так и в непозиционных системах счисления используется определенный набор символов — цифр, последовательное сочетание которых образует число.и Специфика работы программиста предполагает хорошее владение счетом в трехсистемах счисления: двоичной, шестнадцатеричной и десятичной. При этомпрограммист должен достаточно уверенно переводить числа из одной системысчисления в другую.т Числа со знаком представляются в компьютере особым образом: положительные числа — в виде обычного двоичного числа, а отрицательные — в дополнительном коде.Глава 5Синтаксис ассемблераСтруктура программы на ассемблереТипы и структура предложений ассемблераПонятие о метасинтаксических языкахКлассификация лексем ассемблераОписание простых операндов и операндов-выраженийВарианты расположения операндов команд ассемблераВиды адресации операндов в памятиОператоры ассемблераСтандартные директивы сегментацииУпрощенные директивы сегментацииПростые типы данных ассемблера (диапазоны значений)Директивы описания простых типов данныхВ предыдущих главах основное обсуждение было посвящено внутреннему устройству процессора, его принципам работы и программной модели.
И это не случайность — чем более низкий уровень функционирования компьютера доступен пониманию программиста, тем легче и осмысленнее для него становится процессизучения и дальнейшего программирования на языке ассемблера. Сам язык ассемблера пока обсуждался мало. В основном речь шла о нем как о символическоманалоге машинного языка. В связи с этим отмечалось, что программа, написаннаяна ассемблере, отражает основные особенности архитектуры процессора: организацию памяти, способы адресации операндов, правила использования регистрови т.