Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб. пособие по ОЭВМ.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
4.34 Mб
Скачать

Операции сдвига:

SHL (сдвиг влево) op1 SHL op2

Двоичное представление op1 сдвигается влево на op2 разрядов. Освобождающиеся разряды заполняются 0.

SHR (сдвиг вправо) op1 SHR op2

Двоичное представление op1 сдвигается вправо на op2 разрядов. Освобождающиеся разряды заполняются 0.

ASL (арифметический сдвиг влево) op1 ASL op2

Двоичное представление op1 сдвигается влево на op2 разрядов. Освобождающиеся разряды заполняются 0.

ASR (арифметический сдвиг вправо) op1 ASR op2

Двоичное представление op1 сдвигается вправо на op2 разрядов. Знаковый разряд (старший разряд) дублируется.

ROL (циклический сдвиг влево) op1 ROL op2

Двоичное представление op1 циклически сдвигается влево на op2 разрядов. Освобождающиеся разряды заполняются выдвигаемыми разрядами.

ROR (циклический сдвиг вправо) op1 ROR op2

Двоичное представление op1 циклически сдвигается вправо на op2 разрядов. Освобождающиеся разряды заполняются выдвигаемыми разрядами.

8. Приоритеты и порядок выполнения операций:

Для каждой группы операций в нижеследующей таблице приоритетов операций приоритеты одинаковы. Операции с большим значением приоритета выполняются в первую очередь. Чем выше приоритет группы операций, тем выше она расположена в таблице.

Таблица 1. Приоритеты операций

9 NOT COM

8 * / %

7 + -

6 SHL SHR ROR ROL ASR ASL

5 > >= < <=

4 = <>

3 AND

2 XOR

1 OR

Все операции с одинаковыми приоритетом выполняются справа налево. Можно группировать операции с помощью скобок. Операции в скобках будут выполняться в первую очередь.

9. Арифметические преобразования в выражениях.

1. Если операнды в выражениях имеют различный размер (размер операнда зависит от типа, о типах см. ниже), то все результаты операций приводятся к большему размеру.

2. При выполнении присваивания значение выражения преобразуется к размеру переменной, которой оно присваивается.

3. Уменьшение размера значения производится путем отбрасывания старших битов и никаких диагностических сообщений при этом не выводится.

10. Типы языка mcl.

Тип - простая переменная:

Простые переменные предназначены для использования в программе там, где не обязательно явное указание размера переменной - управляющие переменные циклов, счетчики и т.п. Описание простой переменной производится с помощью оператора VAR и синтаксис его определяется следующим правилом:

VAR <идентификатор>, ... ;

Например:

VAR i,j,simple_var; - описаны три простых переменных.

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

Например:

j - значение переменной j;

j[3..3] - значение 3-го разряда переменной j;

i[0..7] - значение восьми младших разрядов переменной j.

Тип - регистр:

Регистры используются там, где необходимо точно определить размер переменной. Регистры могут иметь произвольный размер в пределах от 1 до 32 разрядов. Описание регистра производится с помощью оператора REG. Синтаксис описания регистров определяется следующим правилом:

REG <идентификатор> [ <константа> ] , ... ;

Например:

reg ra[8], rb[8], f_zero[1], mul_res[32];

- описаны два восьмиразрядных регистра ra и rb, одноразрядный регистр f_zero и тридцатидвухразрядный регистр mul_res. Константа описывает размерность регистра.

Использование регистров полностью идентично использованию простых переменных. Так же возможно как получение значения всего регистра, так и получение значения его части.

Например:

ra - значение регистра ra; rb[7..7] - значение старшего бита регистра rb;

mul_reg[16..31] - значение старшей половины регистра mul_reg.

Тип - структура:

Структуры могут быть использованы для упрощения доступа к отдельным полям переменных. Они позволяют присваивать группам битов имена. В остальном структуры сохраняют все свойства регистров. Описание структур производится с помощью оператора STRUCT. Синтаксис описания структур определяется следующим правилом:

STRUCT <имя структуры> [ <константа> ] <имя поля> [<константа>],.. ;

Например:

STRUCT rk[32] kop[16], r1[4], m1[4], r2[4], m2[4];

в этом примере описана 32-х разрядная структура rk с полями kop-[0..15], r1[16..19], m1[20..23], r2[24..27], m2[28..31]. Обратите внимание, что выделение полей в структуре производится начиная с младшего бита (т.е. от младших битов к старшим). Использование структур аналогично использованию регистров, но добавляется еще один метод доступа к значению группы бит - с помощью имени поля,

например:

rk - значение структуры rk;

rk[0..15] - значение младшей половины структуры rk;

rk.kop - то же самое, что и в предыдущем примере, но с использованием имени поля.

Тип - память:

Память представляет собой одномерный массив регистров. Ячейки памяти могут, как и регистры, иметь произвольный размер в пределах 1..32 разряда. Максимальный размер памяти 1024 (1K) ячеек. Индексация ячеек производится от 0. Описание памяти производится с помощью оператора MEM. Синтаксис описания памяти определяется следующим правилом:

<идентификатор> [<константа 1>] <константа 2>],...;

Где первая константа определяет количество ячеек в памяти, а вторая - разрядность ячейки.

Например:

MEM mb[32][8] - описана память mb с числом ячеек 32 и с разрядностью ячейки - 8 бит;

MEM ml[1024][32] - описана память ml с числом ячеек 1024 и с разрядностью ячейки 32 бита;

Для доступа к ячейке памяти необходимо после имени памяти задать индекс этой ячейки. Также возможен доступ и к группам битов отдельной ячейки.

Например:

mb[5] - обращение к 6-й ячейке памяти mb (помните, что индексация ячеек начинается с 0);

ml[9,5..5] - обращение к 6-му разряду 10-й ячейки памяти ml;

ml[100,0..15]- обращение к младшей половине 101-й ячейки памяти ml.