Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
21.05.2015
Размер:
2.41 Mб
Скачать

Команды

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

Форматы команд

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

Команды всегда содержат код операции. В команде могут присутствовать ни одного, один, два или три адреса.

Понятие ассемблера

Язык ассемблера — это язык, в котором каждый оператор соответствует ровно одной машинной команде. Иными словами, в программе, написанной на ассемблере, существует взаимно однозначное соответствие между машинными командами и операторами. Если каждая строка в ассемблерной программе содержит ровно один оператор, и каждое машинное слово содержит ровно одну команду, то из ассемблерной программы размером в n строк получится программа на машинном языке из n слов.

Мы программируем на языке ассемблера, а не на машинном языке (в шестнадцатеричной системе счисления), поскольку это гораздо проще. Использовать символические имена и адреса вместо двоичных и восьмеричных намного удобнее. Многие могут запомнить, что обозначениями для сложения (add), вычитания (subtract), умножения (multiply) и деления (divide) служат команды ADD, SUB, MUL и DIV, но мало кто сможет запомнить соответствующие числовые величины, которые использует для этих команд машина. Программисту, пишущему на языке ассемблера, нужно знать только символические названия, поскольку ассемблер транслирует их в машинные команды.

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

Язык ассемблера имеет несколько особенностей, отличающих его от языков высокого уровня. Во-первых, это взаимно однозначное соответствие между операторами языка ассемблера и машинными командами. Во-вторых, программист, пишущий на ассемблере, имеет доступ ко всем объектам и командам целевой машины. У программистов, пишущих на языках высокого уровня, такого доступа нет. Ассемблерная программа может выполнить любую команду из набора команд целевой машины, а программа на языке высокого уровня — нет. Короче говоря, все, что можно сделать на машинном языке, можно сделать и на ассемблере, но в то же время программистам, пишущим программы на языках высокого уровня, недоступны многие команды, регистры и другие объекты. Языки для системного программирования (например, С) часто имеют некое промежуточное положение. Они, хотя и обладают синтаксисом, присущим языкам высокого уровня, с точки зрения возможностей доступа ближе к ассемблеру.

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

Адресация памяти вычислительных систем — метод указания на ячейку памяти, к которой производится доступ.

Адресация может быть:

  • абсолютная — указывается прямой адрес ячейки памяти.

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

  • относительная — указывается смещение относительно какого-либо значения.

  • косвенная — указывается адрес ячейки, содержащей адрес необходимой ячейки.

  • индексная — указывается адрес начала массива, размер элемента и порядковый номер элемента в массиве.

  • непосредственная — указывает на определённое число (Например: mov A,#50H - записать число 50H в аккумулятор).

  • регистровая — указывает на определённый регистр РОН (регистры общего назначения).

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

Соседние файлы в папке ГОСы