Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

5. Язык Ассемблер. Области применения Ассемблера. Программы на ассемблере. Общая схема трансляции программы.




5. Язык Ассемблер. Области применения Ассемблера. Программы на ассемблере. Общая схема трансляции программы.

Язык ассемблер - это язык низкого уровня. Структура и взаимосвязь цепочек языка близки к машинным командам вычислительной системы, где должна выполняться результирующая программа. Применение языка ассемблера позволяет разработчику управлять ресурсами вычислительной системы (ЦП, ОП, внешние устройства и т. д. ) на уровне машинных команд. Каждая команда исходной программы на языке ассемблере в результате компиляции преобразуется в 1 машинную команду. Транслятор с языка ассемблера часто называется «ассемблер» или «программа ассемблера».

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

Транслятор - это программа, которая переводит (с англ. translate) с нотации одного языка в нотацию другого языка.

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

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

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

Процесс трансляции программы на языке ассемблера в объектный код принято называть ассемблированием. В отличие от компилирования, ассемблирование — более или менее однозначный и обратимый процесс. В языке ассемблера каждой мнемонике соответствует одна машинная инструкция, в то время как в языках программирования высокого уровня за каждым выражением может скрываться большое количество различных инструкций. В принципе, это деление достаточно условно, поэтому иногда трансляцию ассемблерных программ также называют компиляцией.

 

6. Команды пересылки данных. Косвенная адресация памяти. Команды работы со стеком.

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

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

mov приемник, источник.

Команда mov производит копирование источника в назначение.

Команда lea используется для загрузки эффективного адреса. Команду lea еще иногда используют для получения адреса какой-либо процедуры.

lea приемник, источник.

Команда lea помещает адрес источника в назначение.

Отличие lea от mov состоит в том, что используется механизм блока адресации процессора, а не арифметико-логического блока.

Косвенная адресация памяти.

Косвенная адресация памяти, когда в определении адреса ячейки памяти участвует один или несколько регистров процессора. Рассмотрим последовательно эти режимы.

Регистровая косвенная (базовая и индексная). Адресуется память (байт или слово). Относительный адрес ячейки памяти находится в регистре, обозначение которого заключается в прямые скобки. В МП 86 косвенная адресация допустима только через регистры ВХ, ВР, SI и DI. При использовании регистров ВХ или ВР адресацию называют базовой, при использовании регистров SI или DI - индексной.

Команды работы со стеком.

Push источник – сохраняет информацию в стек.

Pop назначение – извлекает информацию из стека.

Pushadd – помещает в стек все основные регистры.

 

7. Команды сложения и вычитания. Команды умножения и деления. Команды распространения знака.

Команды сложения и вычитания.

add приемник, источник

Для сложения двух чисел предназначена команда ADD. Она работает как с числами со знаком, так и с числами без знака (это особенность дополнительного кода). Операнды должны иметь одинаковый размер (нельзя складывать 16- и 8-битное значение). Результат помещается на место первого операнда.

inc операнд

Увеличивает значение операнда в памяти или регистре на 1. Команда используется для увеличения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом команда не воздействует на флаг cf.

sub операнд_1, операнд_2

операнд_1=операнд_2-операнд_1

Целочисленное вычитание. Команда sub используется для выполнения вычитания целочисленных операндов или для вычитания младших частей значений многобайтных операндов.

sbb операнд_1, операнд_2

Целочисленное вычитание с учетом результата предыдущего вычитания командами sbb и sub (по состоянию флага переноса cf). Команда sbb используется для выполнения вычитания старших частей значений многобайтных операндов с учетом возможного предыдущего заема при вычитании младших частей значений этих операндов.

dec операнд

Уменьшение значения операнда в памяти или регистре на 1. Команда dec используется для уменьшения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом заметьте то, что команда не воздействует на флаг cf.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...