Лекция: Команды индексной (адресной) арифметики

Используются для работы с адресами (например, для организации массивов). Работают с индексным и базовым регистрами. Содержимое команды в процессе не меняется, изменяется содержимое индексного регистра.

· внутренняя индексация (все указывается в самой команде: адрес и модификация)

· внешняя индексация (предшествующая команда указывает на код модификации, а следующая — адрес индексного регистра).

1. загрузка начального значения индексного регистра

2. изменение индексного регистра (при изменении на произвольную величину требуется непосредственно указать где она находится)

3. проверка условия и окончание цикла

Язык ассемблера — язык программирования низкого уровня. Язык получил свое название от слова ассемблер (англ. assembler — сборщик) — названия транслятора (компилятора) c языка ассемблера. Язык ассемблера, в некоторых случаях, для краткости, называют «ассемблером» (а что-то связанное с ним — «ассемблерный»), но в общем случае это неправильно. Также, сам ассемблер (программу) никогда не называют «компилятором языка ассемблера» или «компилятором ассемблера» (разве что в редких случаях).

Команды языка ассемблера один в один соответствуют командам процессора и фактически, представляют собой удобную символьную форму записи команд и аргументов. Также, язык ассемблера обеспечивает связывание частей программы и данныx через метки, выполняемое при ассемблировании (для каждой метки высчитывается адрес, после чего каждое вхождение метки заменяется на этот адрес).

Поскольку системы команд микропроцессоров различаются, каждый процессор имеет свой набор команд на языке ассемблера и свои ассемблеры. Данная статья, в основном, касается особенностей языка ассемблера для процессоров Intel семейства x86.

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

Большинство современных компиляторов позволяют комбинировать в одной программе, код написанный на разных языках программирования. Это позволяет быстро писать сложные программы используя высокоуровневый язык, не теряя быстродействия в критических ко времени задачах, используя для них части написанные на языке ассемблера. Комбинирование достигается несколькими приемами:

· Вставка фрагментов на языке ассемблера в текст программы (специальными директивами языка) или написание процедур на языке ассемблера. Способ хороший для несложных преобразований данных, но полноценного ассемблерного кода — с данными и подпрограммами, включая подпрограммы с множеством входов и выходов, не поддерживаемых высокоуровневыми языками, с помощью него сделать нельзя.

· Модульная компиляция. Большинство современных компиляторов работают в два этапа. На первом этапе каждый файл программы компилируется в объектный модуль. А на втором объектные модули линкуются (связываются) в готовую программу.

Объектные файлы представляют собой блоки машинного кода и данных, с неопределенными адресами ссылок на данные и процедуры в других объектных модулях, а также список своих процедур и данных. Линкер собирает код и данные каждого объектного модуля в итоговую программу, вычисляет и заполняет адреса перекрестных ссылок между модулями. Также в процессе линковки происходит связывание программы со статическими и динамическими библиотеками (являющихся архивами объектных файлов).

Прелесть модульной компиляции состоит в том что каждый объектный модуль будущей программы может быть полноценно написан на своем языке программирования и скомпилирован своим компилятором (ассемблером).

Достоинства языка ассемблера

· Максимально оптимальное использование средств процессора, использование меньшего количества команд и обращений в память, и как следствие — большая скорость и меньший размер программы

· Использование расширенных наборов инструкций процессора (ММХ, SSE, SSE2, SSE3)

· Доступ к портам ввода-вывода и особым регистрам процессора (в большинстве ОС эта возможность доступна только на уровне модулей ядра и драйверов)

· Возможность использования самомодифицирующегося (в том числе перемещаемого) кода (под многими платформами эта возможность недоступна, так как запись в страницы кода запрещена, в том числе и аппаратно, однако в большинстве общедоступных систем из-за их врожденных недостатков имеется возможность исполнения кода содержащегося в сегменте (секции) данных, куда запись разрешена)

· Максимальная «подгонка» для нужной платформы


Алгоритмические языки. Основные понятия. Задание языка программирования. Описание синтаксиса языка. Металингвистические формулы и синтаксические диаграммы. Обзор управляющих конструкций языков программирования высокого уровня.

Алгоритмический язык (как и любой другой язык) образуют три его составляющие:

алфавит, синтаксис и семантика.

Алфавит — это фиксированный для данного языка набор основных символов, т.е. «букв алфавита», из которых должен состоять любой текст на этом языке — никакие другие символы в тексте не допускаются.

Синтаксисэто правила построения фраз, позволяющие определить, правильно или неправильно написана та или иная фраза. Точнее говоря, синтаксис языка представляет собой набор правил, устанавливающих, какие комбинации символов являются осмысленными предложениями на этом языке.

Семантика определяет смысловое значение предложений языка. Являясь системой правил истолкования отдельных языковых конструкций,семантика устанавливает, какие последовательности действий описываются теми или иными фразами языкаи, в конечном итоге, какой алгоритм определен данным текстом на алгоритмическом языке.

Каждое понятие алгоритмического языка подразумевает некоторую синтаксическую единицу (конструкцию) и определяемые ею свойства программных объектов или процесса обработки данных.

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

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

1. Имена (идентификаторы) — употpебляются для обозначения объектов пpогpаммы(пеpеменных, массивов, функций и дp.).

2. Опеpации. Типы операций:

  • аpифметические опеpации +, —, *, / и дp. ;
  • логические опеpации и, или, не;
  • опеpации отношения <, >, <=, >=, =, <> ;
  • опеpация сцепки (иначе, «присоединения», «конкатенации» ) символьных значений дpуг с другом с образованием одной длинной строки; изображается знаком "+".

3. Данныевеличины, обpабатываемые пpогpаммой. Имеется тpи основных вида данных: константы, пеpеменные и массивы.

  • Константы — это данные, которые зафиксированы в тексте программы и не изменяются в процессе ее выполнения.

Пpимеpы констант:

    • числовые 7.5, 12 ;
    • логические да(истина), нет(ложь);
    • символьные (содержат ровно один символ) «А», "+" ;
    • литеpные (содержат произвольное количество символов) «a0», «Мир», "" (пустая строка).

 

  • Пеpеменные обозначаются именами и могут изменять свои значения в ходе выполнения пpогpаммы. Пеpеменные бывают целые, вещественные, логические, символьные и литерные.
  • Массивы — последовательности однотипных элементов, число которых фиксировано и которым присвоено одно имя. Положение элемента в массиве однозначно определяется его индексами (одним, в случае одномерного массива, или несколькими, если массив многомерный). Иногда массивы называют таблицами.

4. Выpажения — пpедназначаются для выполнения необходимых вычислений, состоят из констант, пеpеменных, указателей функций (напpимеp, exp(x)), объединенных знаками опеpаций.

Выражения записываются в виде линейных последовательностей символов(без подстрочных и надстрочных символов, «многоэтажных» дробей и т.д.), что позволяет вводить их в компьютер, последовательно нажимая на соответствующие клавиши клавиатуры.

Различают выражения арифметические, логические и строковые.

  • Арифметические выражения служат для определения одного числового значения. Например, (1+sin(x))/2. Значение этого выражения при x=0 равно 0.5, а при x=p/2 — единице.
  • Логические выражения описывают некоторые условия, которые могут удовлетворяться или не удовлетворяться. Таким образом, логическое выражение может принимать только два значения — «истина» или "ложь" (да или нет). Рассмотрим в качестве примера логическое выражение x*x + y*y < r*r, определяющее принадлежность точки с координатами (x, y) внутренней области круга радиусом r c центром в начале координат. При x=1, y=1, r=2 значение этого выражения — «истина», а при x=2, y=2, r=1 — «ложь».
  • Cтроковые (литерные) выражения, значениями которых являются текcты. В строковые выражения могут входить литерные и строковые константы, литерные и строковые переменные, литерные функции, разделенные знаками операции сцепки. Например, А + В означает присоединение строки В к концу строки А. Если А = «куст „, а В = “зеленый», то значение выражения А + В есть «куст зеленый».

5. Операторы (команды). Оператор — это наиболее крупное и содержательное понятие языка: каждый оператор представляет собой законченную фразу языка и определяет некоторый вполне законченный этап обработки данных. В состав опеpатоpов входят:

  • ключевые слова;
  • данные;
  • выpажения и т.д.

Операторы подpазделяются на исполняемые и неисполняемые. Неисполняемые опеpатоpы пpедназначены для описания данных и стpуктуpы пpогpаммы, а исполняемые — для выполнения pазличных действий (напpимеp, опеpатоp пpисваивания, опеpатоpы ввода и вывода, условный оператор, операторы цикла, оператор процедуры и дp.).

Металингвистические формулы похожи на обычные математические, поэтому они и называются формулами. Строго говоря, металингвистическая формула в левой части всегда содержит определяемое понятие или определяемую метапеременную, затем следует знак по определению (знак состоит из двух двоеточий, за которыми следует математический знак равно), после которого располагается определяющее метавыражение. Это метавыражение состоит из метаконстант, метапеременных и метазнаков. Все используемые в метавыражении метапеременные должны быть определены ранее, чем данная метаформула. Метапеременные заключаются в угловые скобки (математические знаки меньше и больше). При использовании элементов языка можно условно считать, что метапеременные по смыслу определяет программист. Метаконстанты при определении языка программирования – это элементы алфавита и служебные слова (т.е. строго определенные понятия). В конструкциях языка метаконстанты необходимо писать так, как они записаны в определении. В качестве метазнаков используются логическая связки ИЛИ (вертикальная черта) и квадратные скобки, выделяющие необязательную часть метаформулы.

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

Рис. 1 –Элементы синтаксических диаграмм

еще рефераты
Еще работы по информатике