Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Кодирование десятичных чисел



Вся информация (данные) представлена в виде двоичных кодов.

Последовательность нескольких битов или байтов часто называют полем данных. Биты в числе нумеруются справа налево, начиная с 0-го разряда.

В ПК могут обрабатываться поля постоянной и переменной длины.

Поля постоянной длины:

слово — 2 байта двойное слово — 4 байта

полуслово — 1 байт расширенное слово — 8 байт

слово длиной 10 байт — 10 байт

Числа с фиксированной запятой чаще всего имеют формат слова и полуслова, числа с плавающей запятой — формат двойного и расширенного слова.

Поля переменной длины могут иметь любой размер от 0 до 256 байт, но обя­зательно равный целому числу байтов.

Двоично-кодированные десятичные числа могут быть представлены в ПК полями переменной длины в так называемых упакованном и распакованном форматах.

В упакованном формате для каждой десятичной цифры отводится по 4 дво­йных разряда (полбайта), при этом знак числа кодируется в крайнем правом полубайте числа (1100 —знак" +" и 1101 —знак " -" ).

Структура поля упакованного формата:

Здесь и далее: Цф — цифра, Знак — знак числа.

Упакованный формат используется обычно в ПК при выполнении операций сложения и вычитания двоично-десятичных чисел.

В распакованном формате для каждой десятичной цифры отводится по це­лому байту, при этом старшие полубайты (зона) каждого байта (кроме самого младшего) в ПК заполняются кодом 0011 (в соответствии с ASCII-кодом), а в младших (левых) полубай­тах обычным образом кодируются десятичные цифры. Старший полубайт (зона) самого младшего (правого) байта используется для кодирования знака числа.

Структура поля распакованного формата:

Распакованный формат используется в ПК при вводе-выводе информации в ПК, а также при выполнении операций умножения и деления двоично-десятичных чисел.

Пример 3. 6. Число -19310 =-0001100100112-10 в ПК будет представлено:

в упакованном формате —

в распакованном формате

Машинно-ориентированный язык ассемблер: организация программы, команды пересылки, команды сложения, вычитания, умножения, деления. Понятие о макропрограммировании.

Выполнение программы, написанной на языке ассемблера, осуще­ствляется в два этапа: сначала трансляция, затем счет. Для любой ЭВМ можно придумать разные языки ассемблера, хотя бы потому, что можно по-разному обозначать машинные операции. Лексемы –– это простейшие конструкции (имена, числа и строки). Идентификаторы нужны для обозначения различных объектов программы - пе­ременных, меток, названий операций и т. п. В ЯА идентификатор –– это последовательность из латинских букв (больших и малых), цифр и следующих знаков: ? . @ _ $На эту последовательность накладываются следующие ограничения: • длина идентификатора может быть любой, но значащими являются только первые 31 символ (идентификаторы, отличающиеся только в 32-й и последующих позициях, считаются одинаковыми); • идентификатор не должен начинаться с цифры (6А –– ошибка); • точка может быть только первым символом идентификатора (.А –– можно, А. –– нельзя); • в идентификаторах одноименные большие и малые буквы считаются эквивалентными (АХ, Ах, аХ и ах –– одно и то же); В идентификаторах нельзя использовать буквы русского алфавита

Команды Предложения-команды –– это символьная форма записи машинных команд. Об­щий синтаксис этого типа предложений таков: [< метка>: ] < мнемокод> [< операнды> ] [; < комментарий> ]

Примеры: LAB: ADD SI, 2; изменение индекса NEG А СВW

Метка Синтаксически, метка - это имя. Если метка есть, то после нее обязательно ставится двоеточие. Метка нужна для ссылок на команду из других мест программы, например, для перехода на эту команду. Пример: INITIALISATION:

LAB: ADD BX, AX

Мнемокод (мнемонический код) является обязательной частью команды. Это служебное слово, указывающее в символьной форме операцию, которую должна выполнить команда.

Директивы. Помимо машинных команд в программе на ЯА надо указывать, какие константы и переменные используются в прог­рамме и какие имена мы им дали. Это делается с помощью предложений, назы­ваемых приказами ассемблеру или директивами. Синтаксис директив следующий: [< имя> ] < название директивы> [< операнды> ] [; < комментарий> ] Пример: X DB 10, -5, OFFh; массив X Директивой DW (define word, определить слово) описываются переменные размером в слово. Она аналогична директиве DB. По директиве DD (define double word, определить двойное слово) описываются переменные, под которые отводятся двойные слова

Команды пересылки

· команда MOV Пересылка (move): MOV opl, op2

По команде MOV на место первого операнда пересылается значение второго операнда: opl: =op2. Флаги эта команда не меняет. Запрещены пересылки из одной ячейки памяти в другую, из одного сегментного регистра в другой, запись непосредственного операнда в сегментный регистр. Командой MOV нельзя менять содержимое сегментного ре­гистра CS. Это связано с тем, что регистры CS и IP определяют адрес той коман­ды программы, которая должна быть выполнена следующей. По команде MOV можно переслать как байт, так и слово

MOV AX, BX- переместить BX в AX; MOV AX, [BX]- переместить в AX содержимое по адресу BX

· команда XCHG

Перестановка (exchange): XCHG opl, op2. Эта команда меняет местами значения своих операндов (они должны быть ли­бо байтами, либо словами): ор1 < => ор2. Флаги при этом не меняются.

· оператор указания типа (PTR)

Оператор указания типа PTR (от pointer, указатель) записывается следующим образом:

< тип> PTR < выражение> где < тип> - это BYTE, WORD или DWORD, а выражение может быть константным или адресным.

Команды сложения и вычитания Основными из них являются следующие: Сложение: ADD opl, op2

Вычитание (subtract): SUB opl, op2 Команда ADD складывает операнды и записывает их сумму на место первого операнда: opl: =opl+op2. По команде SUB из первого операнда вычитается вто­рой операнд и полученная разность записывается вместо первого операнда: opl: =opl-op2. Команды ADD и SUB работают как с числами раз­мером в байт, так и с числами размером в слово; нельзя, чтобы один операнд был байтом, а другой - словом Следующая пара команд сложения и вычитания: Увеличение на 1 (increment): INC op Уменьшение на 1 (decrement): DEC op

Команды умножения и деления

Если сложение и вычитание беззнаковых и знаковых чисел производятся по одним и тем же алгоритмам, то умножение чисел этих двух классов выполняется по разным алгоритмам, в связи с чем в ПК имеются две команды умножения:

Умножение целых без знака (multiply): MUL op Умножение целых со знаком (integer multiply): IMUL op

Команды умножения выдают результат в удвоенном формате

Команды деления

Деление чисел без знака и со знаком также реализуется двумя командами:

Деление целых без знака (divide ): DIV op

Деление целых со знаком (integer divide): IDIV op

Первая из этих команд предназначена для деления беззнаковых целых чисел, а вторая –– для деления знаковых чисел, в остальном же эти команды действуют одинаково:

В этих командах местонахождение первого операнда (делимого) и результата фиксировано и потому явно не указывается. Указывается только вто­рой операнд (делитель), который может находиться в регистре или в ячейке па­мяти, но не может быть непосредственным операндом.

Команды сдвига и циклического сдвига, которые представляют собой часть логических возможностей компьютера, имеют следующие свойства: - обрабатывают байт или слово; -имеют доступ к регистру или к памяти; - сдвигают влево или вправо; - сдвигают на величину до 8 бит (для байта) и 16 бит (для слова); - сдвигают логически (без знака) или арифметически (со знаком).

Значение сдвига на 1 может быть закодировано как непосредственный операнд, значение больше 1 должно находиться в регистре CL.

Команды сдвига. К командам данного типа относятся команды, осуществляющие сдвиг по следующему алгоритму: очередной “выдвигаемый” бит устанавливает флаг cf; бит, вводимый в операнд с другого конца, имеет значение 0; при сдвиге очередного бита он переходит во флаг cf, при этом значение предыдущего сдвинутого бита теряется.

Команды линейного сдвига делятся на два подтипа: команды логического линейного сдвига; команды арифметического линейного сдвига.

К командам логического линейного сдвига относятся следующие:

shr операнд, счетчик_сдвигов- логический (беззнаковый)сдвиг вправо. shl операнд, счетчик_сдвигов- логический сдвиг влево.

Команды арифметического линейного сдвига отличаются от команд логического сдвига тем, что они особым образом работают со знаковым разрядом операнда. К ним относятся следующие команды: sar операнд, счетчик_сдвигов — арифметический сдвиг вправо. sal операнд, счетчик_сдвигов (Shift Arithmetic Left) — арифметический сдвиг влево.

Команды циклического сдвига представляет собой операцию сдвига, при к-ой выдвинутый бит занимает освободившийся разряд.

К командам простого циклического сдвига относятся: ror операнд, счетчик_сдвигов — циклический сдвиг вправо. rol операнд, счетчик_сдвигов (Rotate Left) — циклический сдвиг влево.
Содержимое операнда сдвигается влево на количество бит, определяемое операндом счетчик_сдвигов. Сдвигаемые влево биты записываются в тот же операнд справа.

Модифицирует флажки OF и CF. Флажок CF содержит значение последнего сдвинутого бита. В однобитных сдвигах флажок OF = 1, если операция изменила значение старшего (знакового) бита операнда. При сдвиге на несколько бит состояние флажка OF не определено.

К командам циклического сдвига через флаг переноса cf относятся следующие:

rcr операнд, счетчик_сдвигов — циклический сдвиг вправо через перенос.
rcl операнд, счетчик_сдвигов — циклический сдвиг влево через перенос.
Команды циклического сдвига через флаг переноса cfотличаются от команд простого циклического сдвига тем, что сдвигаемый бит не сразу попадает в операнд с другого его конца, а записывается сначала в флаг переноса cf. Только следующее исполнение данной команды сдвига (при условии, что она выполняется в цикле) приводит к помещению выдвинутого ранее бита с другого конца


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-04-10; Просмотров: 1631; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.022 с.)
Главная | Случайная страница | Обратная связь