Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 05.04.2005 | Доступ: свободный | Студентов: 17140 / 6007 | Оценка: 4.25 / 4.16 | Длительность: 12:55:00
Специальности: Разработчик аппаратуры
Лекция 7:

Кодирование команд (часть 1)

< Лекция 6 || Лекция 7: 123 || Лекция 8 >

Пример 7.

Операнд a находится в регистре AL. Операнд b является элементом массива, начальный адрес которого находится в регистре BX. Положение элемента в массиве определяется регистром DI ( рис. 7.2). В этом случае обращение к операнду b происходит посредством базово-индексной адресации.

Расположение операнда при базово-индексной адресации

Рис. 7.2. Расположение операнда при базово-индексной адресации

Символическая запись команды имеет вид:

ADD AL,[BX+DI]

Так как первый операнд находится в регистре AL, то он имеет длину 1 байт. Поэтому в машинном представлении команды w=0, и она выглядит следующим образом:


Если до начала выполнения команды (AX)=25B7, (BX)=3000, (DI)=0474, [3474]=77, (IP)=2519, то после ее выполнения произойдут следующие изменения: (AX)=252E, (IP)=251B. Обратим внимание на то, что содержимое регистра AL представляет собой младший байт регистра AX. Так как операция проводится над байтами, то перенос в старший байт регистра AX блокируется.

Пример 8.

Операнд a находится в регистре AH. Операнд b является элементом двумерного массива, первый элемент которого помечен меткой MAS. Длина (в байтах) от начала массива до начала строки, в которой расположен операнд, хранится в регистре BX, а в регистре DI хранится количество байт от начала текущей строки до операнда b ( рис. 7.3).

Расположение операнда при относительной базово-индексной адресации

Рис. 7.3. Расположение операнда при относительной базово-индексной адресации

Символическая запись команды:

ADD AH,MAS[BX+DI]

Машинный код команды будет зависеть от того, как далеко относительно начала сегмента располагается начало массива (см. пример 6). Если это смещение занимает 2 байта и, например, равно 1D25, то машинный код команды имеет вид:


Если смещение более короткое и может быть записано в одном байте, например, 2D, то машинное представление команды следующее:


При (AX)=84A3, [(BX)+(DI)+disp8]=3474, [3474]=77, (IP)=0110 результат будет (AX)=FBA3, (IP)=0114 в первом случае и (IP)=0113 во втором.

Пример 9.

Операнд a находится в оперативной памяти по прямому адресу 3474. Адрес операнда b, также находящегося в оперативной памяти, содержится в регистре SI.

Сложение этих операндов невозможно выполнить, используя только одну команду, так как система команд не предусматривает сложения операндов формата "память-память". Поэтому одним из возможных вариантов решения этого примера может быть:

MOV AX,[SI]; AX=b
ADD [3474h],AX; a=a+b

Кодирование каждой из этих команд проводится по рассмотренным выше правилам.

< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Илья Бекиров
Илья Бекиров
Кирилл Кондратьев
Кирилл Кондратьев