Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Кодирование десятичных чисел
Вся информация (данные) представлена в виде двоичных кодов. Последовательность нескольких битов или байтов часто называют полем данных. Биты в числе нумеруются справа налево, начиная с 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 операнд, счетчик_сдвигов — циклический сдвиг вправо через перенос. Популярное:
|
Последнее изменение этой страницы: 2016-04-10; Просмотров: 1631; Нарушение авторского права страницы