Например, 0Fh v 15h = 1Fh

XOR op1, op2; op1 := op1 Å op2

Например, 0Fh v 15h = 1Ah

TEST op1, op2; op1^ op2 – результат не запоминается;

Эта операция называется «логическое сравнение». Цель формирование флага ZF = 1 - если результат нулевой, иначе ZF = 0.

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

2) Команды сдвигов

Сдвиги на n разрядов влево можно трактовать, как умножение на 2n, потому все команды сдвигов имеют 2 операнда:

оp1 – рассматривается, как набор битов, подлежащих сдвигу влево или вправо;

op2 – константа сдвига, т. е. целое число без знака, определяющее величину сдвига нового операнда; может принимать значение 1 или CL. Единица означает сдвиг на 1 разряд, а CL – содержимое регистра CL, хранящего значение n. Сдвиг с CL выполняется как повтор однократных сдвигов, содержимое CL не меняется, при CL=0, сдвиг блокируется. Результат записывается на место первого операнда. Команды сдвига модифицируют флаги, кроме AF, а “уходящий” бит фиксируется в CF.

Команды сдвига бывают логические, арифметические и циклические.

Рассмотрим их на командах однократного сдвига:

Логический сдвиг – для беззнаковых чисел может применяться для ускоренного умножения (деления) на 2, выполняется по схеме

op

 

CF

 
SHL op,1 ; сдвиг влево

SHR op,1 ; сдвиг вправо 0

Арифметический сдвиг – применяется для ускоренного умножения (деления) на 2 чисел со знаком, выполняется по схеме

НЕ нашли? Не то? Что вы ищете?

SAL op,1 ; сдвиг влево

SAR op,1 ; сдвиг вправо 0

Циклический сдвиг – для беззнаковых целых, выполняется по схеме

ROL op,1 ; сдвиг влево

ROR op,1 ; сдвиг вправо

Циклический сдвиг через флаг (уходящий бит возвращается в операнд и одновременно фиксируется в CF), выполняется по схеме

op

 

CF

 
RCL ор,1 сдвиг влево

RCR op,1 сдвиг вправо

Циклические сдвиги позволяют образовать передачу числа последовательным кодом и анализировать разряды числа. В МП 80286 и позже допускается использование второго операнда без загрузки в CL (непосредственный операнд), т. е. SHL AX,3 ;

Сегментация памяти

Память трактуется как одномерный массив байтов, каждый байт ассоциируется с двоичным адресом (номером), который называется физическим адресом.

Физический адрес – это 20-битовое беззнаковое целое от 0h до FFFFFh (метка h обозначает 16-ричную систему счисления), которое позволяет описать адресное пространство объемом 1 Мбайт.

Разрядность основного слова МП равна 2 Байта = 16 бит, поэтому для вычисления физического адреса используется выделение из адресного пространства сегментов по 64Кбайта (216), и в пределах сегмента можно определять адрес с помощью 16-битового кода.

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

Логический адрес представляет собой пару двухбайтовых беззнаковых целых чисел, разделенных двоеточием:

-  начальный адрес сегмента (базовый),

-  смещение (эффективный адрес), указывает расстояние в байтах от начала сегмента до адресуемой ячейки памяти.

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

CS : IP

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

15 12 11 0

DS

начальный адрес сегмента

0 0 0 0

+

15 0

смещение внутри сегмента

19 0

физический адрес байта

Ячейка памяти – это неделимый в данной операции набор последовательных битов.

Команды передачи управления

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

Рассмотрим общие аспекты передачи управления. Наиболее важная особенность – это методы адресации, используемые для определения адреса ячейки памяти, куда передаётся управление

Близкие и далекие переходы.

Переходы в ЯА кодируются от слова Jump. Например, безусловный переход:

JMP оp,

где ор – имя команды, которой передается управление (т. е. метка).

Команды перехода модифицируют указатель команд IP и, возможно, регистр сегмента команд CS и бывают двух типов:

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

-  если изменяется пара регистров CS:IP, - это межсегментный переход или далекий переход FAR.

Обычно адрес перехода ассоциируется с меткой команды. Метка – это имя команды, которое располагается до мнемоники команды и отделяется двоеточием. Любая программная метка (включая имя процедуры) имеет атрибут NEAR или FAR.

Например,

АМ1: ADD AX,4

………………….

JMP AM1

Адресация переходов

а) Прямая адресация.

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

JMP CATS

где CATS – метка команды или имя процедуры, а JMP – аналог GOTO.

б) Косвенная адресация

Адрес перехода содержится в регистре или ячейке памяти. Это допускается для межсегментных и внутрисегментных переходов.

JMP AX ; в АХ заранее помещен перехода

JMP NEAR COD[BX]

Во втором примере есть явное указание типа перехода (NEAR – оператор в команде), COD[BX] – базовая адресация команды, которой передается управление.

в) Относительная адресация

Место перехода указывается как некоторое расстояние от самой команды перехода. Эффективный адрес перехода вычисляется суммированием индекса смещения, находится в команде и текущего значения указателя команд IP.

Имеется 2 типа:

1)  с 8 битовым индексным смещением, обеспечивает передачу управления в диапазоне (-128:128Б) (SHORT)

2)  с 16 битовым индексным смещением

(-32 768:32768Б) от текущей команды NEAR

Операндом является метка с атрибутом NEAR, по которой ассемблер автоматически вычисляет значение. В команде может быть указан тип перехода:

mov w, offset L1; (в ячейку w записывается смещение L1 относительно ; текущей команды offset – смещение)

…………………………….

JMP w или JMP SHORT w ;то тогда проверяется корректность программы ; ; (действительно ли short )

Команды условных переходов делятся на 2 группы:

а) операторы, анализирующие результаты предыдущей команды (флаги) – условный переход в классическом понимании. Они имеют только 1-байтовое смещение.

Если условный переход требует удаление более чем на 128Б (30-40 команд), то используется комбинация условного и безусловного перехода.

Например:

Требуется NEAR переход на метку ZERO по флагу ZF=1, тогда

………..

JNZ CONTINUE; if ZF<>1 then continue

JMP ZERO

CONTINUE

Т. е. используется условный переход по противоположному признаку, а по ZF=1 получим 2-хбайтовый переход.

Мнемоника условного перехода сложна, таких переходов более 20. Некоторые очевидны. Для образовании мнемоники используют следующие сокращения:

E – equal (=)

N – not (не)

G – больше для знаковых целых

L – меньше для знаковых целых

A – above (выше) беззнаковых

B –below (ниже) для беззнаковых

В условных переходах используется после J от одной до трех букв (из перечисленных выше).

Например, после сравнения чисел результат ор1<ор2, возможны 2 команды, эквивалентные между собой для одного и того же перехода.

-  Для знаковых JL ADRES

JMGE ADRES

-  Для беззнаковых JB ADRES

JNA ADRES

б) команды управления итерацией(циклом) :

LOOP ор

Управление циклом по счетчику, где ор – метка первой команды цикла, цикл управляется счетчиком в СХ.

Команда LOOP уменьшает содержимое СХ (dec СХ) и передает управление в начало цикла, если содержимое СХ<>0, иначе управление передается команде следующей за LOOP.

Обычно цикл оформляется следующим образом.

mov CX, N ; СХ = числу переходов цикла

L1: ……… начало цикла

……………….

LOOP L1;

Команда LOOP эквивалентна 3-м командам:

Dec CX

Cmp CX, 0

Jne L1

Цикл должен быть в рамках short.

Особенности команды LOOP:

-  счетчик цикла находится только в CX;

-  начальное значение загружается в CX>0 до входа в цикл;

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11