Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
01юьб тж.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.62 Mб
Скачать

Представление команд

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

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

В ассемблере команды имеют следующий синтаксис:

Метка: Мнемокод Операнды Комментарий

Метка и комментарий могут отсутствовать. Мнемокод представляет собой сокращенное название операции, например, mov (от англ. move) означает операцию пересылки данных, jmp (от англ. jump) означает операцию безусловного перехода и т.д. Операнды перечисляются через запятую. Комментарий всегда начинается с точки-с-запятой.

Теперь рассмотрим некоторые команды языка Ассемблер подробно.

Пересылка (копирование) данных. Наиболее часто используемой командой языка Ассемблер является команда пересылки данных

mov назначение, источник

Она позволяет скопировать содержимое одного регистра в другой, например,

mov ax, bx ; axbx

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

mov ax, имя ; axимя

mov имя, ax ; имяax

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

При работе с регистрами не забывайте о том, что они являются 16-битовыми, т.е. имеют тип данных слово, лишь регистры общего назначения делятся на 8-битовые регистры.

Далее рассмотрим некоторые арифметические команды, выполняемые над двоичными целыми числами (см. таблицу 3).

В рассматриваемых ниже командах, подобно команде mov, в качестве операндов а и b могут быть либо два регистра, либо один из операндов должен быть регистром.

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

Таблица 3. Некоторые арифметические команды над двоичными числами

add a, b

сложение

a = a + b

sub a, b

вычитание

a = a - b

adс a, b

сложение с заемом

a = a + b + cf

sbb a, b

вычитание с заемом

a = a - b - cf

inc a

инкремент

a = a + 1

dec a

декремент

a = a - 1

Арифметические команды

Сложение двоичных чисел без знака. Если результат сложения не превышает 255, то операция производится верно, если результат сложения превышает 255, то есть выходит за пределы 8 бит, то старшая единица теряется. В последнем случае флаг переноса cf становится равным 1.

Сложение двоичных чисел со знаком. У чисел со знаком старший бит (7й, 15й или 31й) является знаковым. Если число положительное, то он равен нулю, если отрицательное – единице. Положительное число при этом представлено в двоичном коде, отрицательное – в дополнительном. При сложении таких чисел состояние старшего бита регистрируется во флаге переполнения of.

Вычитание двоичных чисел без знака. Операция производится верно, если уменьшаемое меньше вычитаемого (если a<b, см. таблицу 3). В противном случае по правилам арифметики происходит заем из старшего разряда, что фиксируется во флаге переноса cf.

Вычитание двоичных чисел со знаком. При таком вычитании возможна ситуация, когда значащий бит числа изменяет знаковый бит. Если это происходит, то флаг переполнения устанавливается of в 1 (становится равным единице).

Преобразование в дополнительный код осуществляется командой

neg операнд

При этом ее операндом может быть и регистр, и переменная.

Логические команды приведены в таблице 4.

Таблица 4. Логические команды

and a, b

логическое И

a = a AND b

or a, b

логическое ИЛИ

a = a OR b

not a

логическое НЕ

a = NOT a

xor a, b

логическое исключающее ИЛИ

a = a OR b

Логическое И выполняет поразрядное умножение двух операндов, которые могут находиться в регистре или в памяти. Если два проверяемых бита равны 1, то в первом операнде устанавливается единичное значение бита, в остальных случаях − нулевое.

Например, пусть регистр cx содержит слово 02F7h. После выполнения команды

and cx,F300h

регистр CX будет иметь значение 0200h:

регистр cx: 02F7H 0000 0010 1111 0111

2й операнд: F300H 1111 0011 0000 0000

результат: 0200H 0000 0010 0000 0000

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

or cx,F300h

регистр CX будет иметь значение F3F7h:

результат: 0200H 1111 0011 1111 0111

Логическое исключающее ИЛИ выполняет логическую операцию исключающего ИЛИ над битами двух операндов, которые могут находиться в регистре или в памяти. Например, после выполнения команды

xor cx,F300h

регистр CX будет иметь значение F1F7h:

результат: 0200H 1111 0001 1111 0111

Другими словами команда xor устанавливает одинаковые биты в 0, а отличающиеся − в 1. Данная команда используется для быстрой очистки регистров, например, после выполнения команды

xor ax, ax

регистр ax станет равным 0.