В современных ЭВМ минимальной адресуемой единицей памяти является, как правило, 1 байт. В связи с этим обмен с памятью организуется блоками, кратными этой величине: байтами, словами, двойными словами, учетверенными словами, в зависимости от выполняемой процессором команды и разрядности внешней шины данных. Такой обмен проходит под управлением специальных сигналов, поступающих по системной шине. Преобразование информации из формата ее представления на шине данных в формат, учитывающий организацию конкретных схем памяти, осуществляется специальными интерфейсными схемами. Большие интегральные схемы (БИС), на которых строятся модули памяти, являются изделиями электронной промышленности и могут иметь различную организацию. Разработчики средств вычислительной техники должны учитывать имеющуюся у них номенклатуру БИС памяти, чтобы построить запоминающее устройство необходимой емкости и организации. Для этой цели может проводиться объединение нескольких БИС либо с целью увеличения количества слов в модуле памяти, либо для наращивания разрядности каждого слова, либо с той и другой целью одновременно.
Рассмотрим варианты построения блока памяти необходимой организации при наличии заданных БИС памяти.
Построить ОЗУ с организацией 8К*8 разрядов на БИС с организацией 1К*8 разрядов (рис. 5.3).
Рис. 5.3. Условно-графические обозначения запоминающих устройств с различной организацией:а - 1К*8 разрядов; б - 8К*8 разрядов
В данном случае требуется построить модуль памяти, имеющий большее число слов, чем в составляющих его БИС. Модуль памяти будет состоять из восьми БИС. Для обращения к модулю памяти используется 13-разрядный адрес (А12 А0), поступающий по шине адреса (ША). Три старших разряда (А12-А10) определяют ту схему, которая в данный момент включается в работу, а каждая ячейка внутри любой БИС определяется 10-ю младшими разрядами адреса (А9-А0) (рис. 5.4).
Рис. 5.4. Организация модуля памяти
При единичном значении сигнала на входе выбора кристалла БИС (CS=1) выходные разряды данных находятся в третьем состоянии, то есть как бы отключены от шины (DO=Z).Таким образом, при любом значении кода на шине адреса всегда в работе находится одна и только одна из восьми БИС (рис. 5.5).
Рис. 5.5. Запоминающее устройство объемом 8К*8 разрядов на БИС с организацией 1К*8 разрядов
В реальных микросхемах шины данных записи и чтения (DI и DO) обычно представляют собой общую двунаправленную шину.
Сигналы на шине управления означают: MW - сигнал записи в память, MR - сигнал чтения из памяти.
Построить ОЗУ с организацией 1К*8 разрядов на БИС с организацией 1К*1 разряд (рис. 5.6).
Рис. 5.6. Условно-графическое обозначение БИС с организацией 1К*1 разряд
В данном случае требуется увеличить разрядность слова памяти. Так как все разряды одного слова должны записываться и считываться одновременно, то все БИС должны работать параллельно. Модуль памяти будет состоять из восьми БИС (рис. 5.7). Если разрабатываемый блок является частью модуля памяти, имеющего объем больше, чем 1К слов (например, 8К), то необходим специальный дешифратор, который будет дешифрировать старшие разряды адреса аналогично тому, как показано на рис. 5.5 и включать в работу данный блок.
Рис. 5.7. Запоминающее устройство объемом 1К*8 разрядов на БИС с организацией 1К*1 разряд
6. Лекция: Режимы адресации и форматы команд 16-разрядного процессора
Страницы: 1 | 2 | 3 | вопросы |»
| учебники | для печати и PDA | ZIP
Если Вы заметили ошибку - сообщите нам, или выделите ее и нажмите Ctrl+Enter
Рассматриваются режимы адресации 16-разрядного микропроцессора Intel-8086 и их связь с форматами команд, а также форматы и особенности реализации команд переходов.
Микропроцессор Intel-8086 (К1810ВМ80) имеет двухадресную систему команд [8,10]. Ее особенностью является отсутствие команд, использующих оба операнда из оперативной памяти. Исключение составляют лишь команды пересылки и сравнения цепочек байт или слов, которые в данном пособии рассматриваться не будут. Таким образом, в командах допустимы следующие сочетания операндов: RR, RS, RI, SI. Здесь R обозначает операнд, находящийся в одном из регистров регистровой памяти микропроцессора, S - операнд, находящийся в оперативной памяти, адрес которого формируется по одному из допустимых способов адресации, I - непосредственный операнд, закодированный в адресном поле самой команды. Формат команды во многом определяется способом адресации операнда, находящего в оперативной памяти, длиной используемого непосредственного операнда, а также наличием и длиной смещения, используемого при относительных режимах адресации.
Микропроцессор имеет все режимы адресации, общая схема которых была рассмотрена выше. Естественно, они имеют определенные особенности, присущие данному процессору.
Непосредственная адресация предполагает, что операнд занимает одно из полей команды и, следовательно, выбирается из оперативной памяти одновременно с ней. В зависимости от форматов обрабатываемых процессором данных непосредственный операнд может иметь длину 8 или 16 бит, что в дальнейшем будем обозначать data8 и data16 соответственно.
Механизмы адресации операндов, находящихся в регистровой памяти и в оперативной памяти, существенно различаются. К регистровой памяти допускается лишь прямая регистровая адресация. При этом в команде указывается номер регистра, содержащего операнд. 16-разрядный операнд может находиться в регистрах AX, BX, CX, DX, DI, SI, SP, BP, а 8-разрядный - в регистрах AL, AH, BL, BH, CL, CH, DL, DH.
Адресация оперативной памяти имеет свои особенности, связанные с ее разбиением на сегменты и использованием сегментной группы регистров для указания начального адреса сегмента. 16-разрядный адрес, получаемый в блоке формирования адреса операнда на основе указанного режима адресации, называется эффективным адресом (ЭА). Иногда эффективный адрес обозначается как ЕА (effective address). 20-разрядный адрес, который получается сложением эффективного адреса и увеличенного в 16 раз значения соответствующего сегментного регистра, называется физическим адресом (ФА).
Именно физический адрес передается из микропроцессора по 20-ти адресным линиям, входящим в состав системной шины, в оперативную память и используется при обращении к ее ячейке на физическом уровне. При получении эффективного адреса могут использоваться все основные режимы адресации, рассмотренные выше, а также некоторые их комбинации.
Прямая адресация предполагает, что эффективный адрес является частью команды. Так как ЭА состоит из 16 разрядов, то и соответствующее поле команды должно иметь такую же длину.
При регистровой косвенной адресации эффективный адрес операнда находится в базовом регистре BX или одном из индексных регистров DI либо SI:
Обозначение имени регистра в квадратных скобках указывает на содержимое соответствующего регистра. Фигурные скобки - символ выбора одной из нескольких возможных альтернатив.
При регистровой относительной адресацииэффективный адрес равен сумме содержимого базового или индексного регистра и смещения:
Обозначения disp8 и disp16 здесь и далее указывают на 8- или 16-разрядное смещение соответственно.
Эффективный адрес при базово-индексной адресации равен сумме содержимого базового и индексного регистров, определяемых командой:
Наиболее сложен механизм относительной базово-индексной адресации. Эффективный адрес в этом случае равен сумме 8- или 16-разрядного смещения и базово-индексного адреса:
Форматы двухоперандных команд представлены на рис.6.1. Пунктиром показаны поля, которые в зависимости от режима адресации могут отсутствовать в команде.
Рис. 6.1. Форматы двухоперандных команд микропроцессора I8086
Поле КОП содержит код выполняемой операции. Признак w указывает на длину операндов. При w = 1 операция проводится над словами, а при w = 0 - над байтами. Признак d указывает положение приемника результата. Признак d = 1, если результат записывается на место операнда, закодированного в поле reg, и d = 0, если результат записывается по адресу, закодированному полями (md, r/m).
Второй байт команды, называемый постбайтом, определяет операнды, участвующие в операции. Поле reg указывает регистр регистровой памяти согласно табл. 6.1
Таблица 6.1.
reg
Регистр
w=1
w=0
AX
AL
CX
CL
DX
DL
BX
BL
SP
AH
BP
CH
SI
DH
DI
BH
Поля md и r/m задают режим адресации второго операнда согласно табл. 6.2.
Таблица 6.2.
r/m
md
w=1
w=0
(BX)+(SI)
(DS)
(BX)+(SI)+disp 8
(DS)
(BX)+(SI)+disp 16
(DS)
AX
AL
(BX)+(DI)
(DS)
(BX)+(DI)+disp 8
(DS)
(BX)+(DI)+disp 16
(DS)
CX
CL
(BP)+(SI)
(SS)
(BP)+(SI)+disp 8
(SS)
(BP)+(SI)+disp 16
(SS)
DX
DL
(BP)+(DI)
(SS)
(BP)+(DI)+disp 8
(SS)
(BP)+(DI)+disp 16
(SS)
BX
BL
(SI)
(DS)
(SI)+disp 8
(DS)
(SI)+disp 16
(DS)
SP
AH
(DI)
(DS)
(DI)+disp 8
(DS)
(DI)+disp 16
(DS)
BP
CH
disp16
(DS)
(BP)+disp 8
(SS)
(BP)+disp 16
(SS)
SI
DH
(BX)
(DS)
(BX)+disp 8
(DS)
(BX)+disp 16
(DS)
DI
BH
В этой таблице помимо определения режима адресации оперативной памяти указан также сегментный регистр, используемый по умолчанию для получения физического адреса. Использование другого сегментного регистра возможно введением специального префикса (дополнительного байта, который записывается перед командой).
В командах, использующих непосредственный операнд, признак s вместе с признаком w определяет разрядность непосредственного операнда, записываемого в команде, и разрядность выполняемой операции согласно табл. 6.3.
Таблица 6.3.
w
s
Операция
Непосредственный операнд
8-разрядная
8-разрядный
не используется
16-разрядная
16-разрядный
8-разрядный, расширяемый знаком до 16-ти разрядов при выполнении операции
Изменение естественного порядка выполнения команд программы осуществляется с помощью команд передачи управления. К ним относятся команды переходов, циклов, вызова подпрограммы и возврата из нее, а также некоторые другие. Мы рассмотрим лишь первые две группы команд.
Классификация команд переходов в персональной ЭВМ представлена на рис. 6.2.
Рис. 6.2. Классификация команд переходов IBM PC
Физический адрес выполняемой команды определяется содержимым указателя команд IP и сегментного регистра команд CS. Команды, меняющие значение обоих этих регистров, называются командами межсегментных переходов, а меняющие только значение IP, - командами внутрисегментных переходов.
Команды безусловных переходов производят модификацию регистра IP или регистров IP и CS без предварительного анализа каких-либо условий. Существует пять команд безусловных переходов. Все они имеют одинаковую мнемонику JMP и содержат один операнд. Конкретный формат команды определяется соответствующим префиксом и приведен в общей таблице машинного представления команд (табл. 6.4).
Таблица 6.4. Машинные коды некоторых команд
Команда
Байты кода команды
Схема операции
байт 1
байт 2
байты 3…6
ADD
000000dw
md reg r/m
(disp8/16)
r(r/m) = r + r/m
100000sw
md 000 r/m
(disp8/disp16)d8/16
r/m = r/m + d8/16
0000010w
data L
(data H)
ac = ac + d8/16
SUB
001010dw
md reg r/m
(disp8/16)
r(r/m)=r(r/m)-(r/m)r
100000sw
md 101 r/m
(disp8/16)d8/16
r/m = r/m - d8/16
0010110w
data L
(data H)
ac = ac - d8/16
AND
001000dw
md reg r/m
(disp8/16)
r(r/m) = r & r/m
100000sw
md 100 r/m
(disp8/16)d8/16
r/m = r/m & d8/16
0010010w
data L
(data H)
ac = ac & d8/16
OR
000010dw
md reg r/m
(disp8/16)
r(r/m) = r V r/m
100000sw
md 001 r/m
(disp8/16)d8/16
r/m = r/m V d8/16
0000110w
data L
(data H)
ac = ac V d8/16
XOR
001100dw
md reg r/m
(disp8/16)
r(r/m) = r + r/m
100000sw
md 110 r/m
(disp8/16)d8/16
r/m = r/m + d8/16
0011010w
data L
(data H)
ac = ac + d8/16
MOV
100010dw
md reg r/m
(disp8/16)
r = r/m, r/m = r
1100011w
md 000 r/m
(disp8/16)d8/16
r/m = d8/16
1011wreg
data L
(data H)
reg = d8/16
1010000w
disp L
disp H
ac=m;прямой адрес
1010001w
disp L
disp H
m=ac;прямой адрес
CMP
0011101w
md reg r/m
(disp8/16)
r - r/m
0011100w
md reg r/m
(disp8/16)
r/m - r
100000sw
md 111 r/m
(disp8/16)d8/16
r/m - d8/16
0011110w
data L
(data H)
ac - d8/16
INC
1111111w
md 000 r/m
(disp8/16)
r/m = r/m+1
01000reg
reg = reg+1
DEC
1111111w
md 001 r/m
(disp8/16)
r/m = r/m-1
01001reg
reg = reg-1
TEST
1000010w
md reg r/m
(disp8/16)
r & r/m
1111011w
md 000 r/m
(disp8/16)d8/16
r/m & d8/16
1010100w
data L
(data H)
ac & d8/16
XCHG
10010reg
reg ↔ AX
1000011w
md reg r/m
(disp8/16)
reg ↔ r/m
JMP short
disp L
IP=IP+dispL
near ptr
disp L
disp H
IP=IP+dispH,L
word ptr
md 100 r/m
(disp8/16)
IP=(EA)
far ptr
IP-L
IP-H,CS-L,CS-H
IP=IPH,L, CS=CSH,L
dword ptr
md 101 r/m
(disp8/16)
IP=(EA), CS=(EA+2)
Условный переход
IP=IP+dispL, если условие выполнено, иначе к след. команде
JZ (JE)
disp L
ноль (равно)
JNZ (JNE)
disp L
не ноль (не равно)
JS
disp L
минус
JNS
disp L
плюс
JO
disp L
переполнение
JNO
disp L
нет переполнения
JL (JNGE)
disp L
меньше для чисел
JNL (JGE)
disp L
не меньше для чисел
JG (JNLE)
disp L
больше для чисел
JNG (JLE)
disp L
не больше для чисел
JB (JNAE,JC)
disp L
меньше для кодов
JNB (JAE, JNC)
disp L
не меньше для кодов
JA (JNBE)
disp L
больше для кодов
JNA (JBE)
disp L
не больше для кодов
JP (JPE)
disp L
четное число "1"
JNP (JPO)
disp L
нечетное число "1"
Примечание: в столбце "Схема операции" ac означает регистр-аккумулятор, в качестве которого используется регистр AX при w=1 и регистр AL при w=0.
При безусловном прямом внутрисегментном переходе новое значение указателя команд IP равно сумме смещения, закодированного в соответствующем поле команды, и текущего значения IP, в качестве которого используется адрес команды, записанной вслед за командой перехода. Команды прямых межсегментных переходов содержат в себе помимо нового значения IP и новое значение сегментного регистра CS.
Команды косвенных переходов (внутрисегментных и межсегментных) передают управление на команду, адрес которой определяется содержимым регистра или ячеек оперативной памяти, на которые указывает закодированный в команде перехода постбайт.
Команды условных переходов являются только внутрисегментными. По своему формату и способу формирования нового значения IP они полностью аналогичны команде внутрисегментного прямого перехода с 8-разрядным смещением. Отличие их заключается в том, что в командах условного перехода механизм формирования нового значения IP включается лишь при выполнении определенных условий, а именно, при определенном состоянии регистра флагов. При невыполнении проверяемого условия в IP остается его текущее значение, то есть адрес команды, следующей за командой условного перехода.
Ниже приведены примеры команд переходов различных типов.
Команды условного перехода:
формат:
IP = IP + 2, если условие не выполнено;
IP = IP +2 + disp L, если условие выполнено;
пример:
JZ MARK; переход на метку MARK, если ZF = 1.
Команды прямого внутрисегментного перехода:
формат:
IP = IP + Δ + disp, где Δ - длина команды перехода (2 или 3 в зависимости от длины смещения);
примеры:
JMP short ptr MARK; переход на метку MARK, с использованием 8-разрядного смещения;
JMP near ptr MARK; переход на метку MARK, с использованием 16-разрядного смещения.
Команды прямого межсегментного перехода
формат:
IP = IP_H, IP_L,
CS = CS_H, CS_L;
пример:
JMP far ptr MARK; переход на метку MARK к команде, находящейся в другом сегменте.
Команды косвенного внутрисегментного перехода:
формат:
IP = [EA + 1, EA]; или
IP = <регистр>, если в постбайте задано обращение к регистровой памяти;
пример:
JMP word ptr [BX + SI]; новое значение IP берется из двух последовательных байт памяти, эффективный адрес первого из которых определяется суммой регистров BX и SI.
Команды косвенного межсегментного перехода:
формат:
IP = [EA + 1, EA],
CS = [EA + 3, EA + 2];
пример:
JMP dword ptr [BX + SI]; сумма регистров BX и SI определяет эффективный адрес области памяти, первые два байта которой содержат новое значение IP, а следующие два байта - новое значение CS.
Команды циклов идентичны по формату и очень близки по выполняемым действиям командам условных переходов. Однако по сравнению с последними они имеют ряд особенностей, позволяющих эффективно использовать их при программировании циклических участков алгоритмов.
Один из наиболее распространенных видов циклического участка программы представлен на рис. 6.3.
Рис. 6.3. Структура счетного цикла с постпроверкой
Команды циклов предназначены для упрощения действий декремента (уменьшения на 1) счетчика цикла, проверки условия выхода из цикла и перехода.
Некоторые команды цикла реализуют выход из цикла не только по значению счетчика, но и при выполнении некоторых других условий.
Описание команд цикла сведено в табл. 6.5. За исключением команды JCXZ, которая не изменяет значения регистра CX, при выполнении команд циклов производятся следующие действия: CX=(CX)-1. Затем, если проверяемое условие выполнено, то IP=(IP)+disp8 с расширением смещения знаком до 16 разрядов, в противном случае IP не изменяется, и программа продолжает выполнение в естественном порядке.
Таблица 6.5. Команды циклов
Название
Мнемоника
Альтернативная мнемоника
КОП
Проверяемое условие
Зациклить
LOOP
(CX)=0
Зациклить пока ноль (равно)
LOOPZ
LOOPE
(ZF=1)&(CX)=0)
Зациклить пока не ноль (неравно)
LOOPNZ
LOOPNE
(ZF=0)&((CX)=0)
Перейти по (CX)
JCXZ
(CX)=0
7. Лекция: Кодирование команд (часть 1)
Страницы: 1 | 2 | 3 | вопросы |»
| учебники | для печати и PDA | ZIP
Если Вы заметили ошибку - сообщите нам, или выделите ее и нажмите Ctrl+Enter
Рассматриваются практические вопросы, связанные с машинным представлением команд различных форматов и с различными режимами адресации операндов, с дизассемблированием команд, с оценкой влияния структуры программы на время ее выполнения.
С целью лучшего понимания архитектуры ЭВМ рассмотрим машинное представление команд различных форматов, использующих различные режимы адресации операндов.
Рассмотрим это на примере операции сложения. Так как в системе команд ЭВМ, базирующихся на микропроцессорах фирмы Intel, результат операции записывается на место первого операнда, то данная операция будет иметь вид: a=a+b.
Для наглядного представления команды будем пользоваться ее символической записью, приближенной к записи на языке Ассемблер. Общий формат ассемблерной команды имеет следующий вид:
[Метка:] Мнемоника_операции Операнд,Операнд [; Комментарий]
Метка - это идентификатор, присваиваемый адресу первого байта команды. Наличие метки в команде необязательно. При отсутствии метки двоеточия быть не должно.
Во всех командах необходимо наличие мнемоники, обозначающей выполняемую команду.
Наличие и количество (один или два) операндов зависит от команды. В случае двух операндов они разделяются запятой, при этом первым указывается операнд-приемник, а вторым - операнд-источник. Примеры обозначения операндов при различных режимах адресации будут рассмотрены ниже.
Поле комментария предназначено для пояснения программы и может содержать любую комбинацию символов. При отсутствии комментария точка с запятой может не ставиться.
Кодирование линейных команд
Пример 1.
Оба операнда находятся в регистрах общего назначения: (AX)=a; (CX)=b. Для обращения к операндам используется прямая регистровая адресация.
Символическая запись команды:
ADD AX,CX
Согласно таблица 6.2 машинное представление этой команды имеет вид:
000000dw md reg r/m
По условию операнды занимают полноразрядные регистры длиной 1 слово, следовательно, необходимо установить w=1.
Так как оба операнда располагаются в регистрах общего назначения, то любой из них можно закодировать в поле reg. Поэтому команда может иметь два различных представления в машинном коде. При этом, если в поле reg закодирован номер регистра AX, то бит приемника результата d=1. Если в поле reg закодирован номер регистра CX, то бит приемника результата d=0.
или
Здесь и далее в записи команд b означает двоичное представление, h - 16-е.
После выполнения команды в AX будет записана сумма содержимого регистров AX и CX, а указатель команды IP увеличится на длину выполненной команды (2 байта) и будет указывать на первый байт следующей команды.
Здесь и далее представление информации будем давать в 16-м виде, если другое не оговорено особо.
Если перед началом выполнения команды (AX)=0C34, (CX)=1020, (IP)=0012, то после ее выполнения (AX)=1C54, (CX)=1020, (IP)=0014.
Пример 2.
Операнд a находится в регистре AX, b - непосредственный операнд, равный 56B3h.
Символическая запись команды:
ADD AX,56B3h
Машинное представление:
Если непосредственный операнд имеет величину, которая может быть закодирована в одном байте, например, 77 (в десятичной системе счисления), что при представлении в дополнительном коде дает 0100 1101b = 4Dh, то за счет использования признака s удается сократить длину команды:
Данное представление команды построено по общей схеме команд суммирования любого регистра с непосредственным операндом. Так как в нашем случае непосредственный операнд суммируется с содержимым регистра AX, то команда может быть записана в специальном формате работы с регистром- аккумулятором и иметь меньшую длину:
для операнда 56B3h.
Возможность использования признака s в этом формате отсутствует.
Пусть перед началом выполнения команды (AX)=03A4, (IP)=0012.
Тогда результатом выполнения команды ADD AX,56B3h будет: (AX)=5A57, (IP)=0016, а результатом выполнения команды ADD AL,B3h будет: (AX)=0357, (IP)=0015, если команда закодирована по общей схеме, и (IP)=0014 - если по схеме суммирования с аккумулятором.
Отметим, что в последнем случае действие выполняется лишь с младшим байтом регистра AX, то есть с регистром AL, и его результат не влияет на содержимое AH.
Пример 3.
Операнд a находится в AX, операнд b - в оперативной памяти по прямому адресу 3474h.
Символическая запись команды:
ADD AX,[3474h]
Ее машинное представление:
Пусть перед выполнением команды (AX)=1234, [3474h]=1A, [3475h]=25, (IP)=0012. Напомним, что адрес слова в оперативной памяти - это адрес его младшего байта. Тогда после выполнения команды: (AX)=374E, (IP)=0016.
Пример 4.
Если операнд a находится в оперативной памяти по прямому адресу 3474h, а операнд b представляет собой непосредственный операнд, равный 56B3h, то символическая запись команды имеет вид:
ADD [3474h],56B3h
а ее машинное представление:
При тех же исходных данных, что и в примере 3, результатом операции будет: [3474]=CD, [3475]=7B, (IP)=0018.
Пример 5.
Операнд a находится в слове оперативной памяти, адрес которого хранится в регистре BX, а операнд b - в регистре AX. В этом случае адресация операнда a - регистровая косвенная.
Символическая запись команды:
ADD [BX],AX
Машинное представление:
Если перед выполнением команды (AX)=1234, (BX)=3474, [3474]=D7, [3475]=11, (IP)=0012, то в результате выполнения команды произойдут следующие изменения: [3474]=0B, [3475]=24, (IP)=0014.
Пример 6.
Операнд a находится в AX. Операнд b является элементом массива, первый элемент которого помечен меткой MAS, а положение операнда b в массиве определяется содержимым регистра BX (рис. 7.1).
Рис. 7.1. Организация доступа к операнду при регистровой относительной адресации
Символическая запись команды:
ADD AX,MAS[BX]
При ассемблировании программы метке ставится в соответствие смещение относительно начала сегмента. Таким образом, операнд b будет определяться в данном случае с помощью регистровой относительной адресации (суммирование значения смещения и содержимого регистра).
Пусть начало массива MAS имеет смещение в 3000h байтов от начала сегмента DS. Тогда машинный код команды будет иметь вид:
Если перед выполнением команды (AX)=1234, (BX)=0074, [3474]=E6, [3475]=64, (IP)=0102, то результатом будет: (AX)=771A, (IP)=0106.
Если начало массива располагается со смещением 70h байтов от начала сегмента DS, то программа Ассемблера сформирует более короткий машинный код команды:
Если исходное состояние элементов хранения совпадает с предыдущим, за исключением (BX)=3004, то и результат будет таким же, за исключением (IP)=0105.
Пример 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=bADD [3474h],AX; a=a+b
Кодирование каждой из этих команд проводится по рассмотренным выше правилам.
8. Лекция: Кодирование команд (часть 2)
Страницы: 1 | 2 | 3 | вопросы |»
| учебники | для печати и PDA | ZIP
Если Вы заметили ошибку - сообщите нам, или выделите ее и нажмите Ctrl+Enter
Рассматриваются практические вопросы, связанные с машинным представлением команд различных форматов и с различными режимами адресации операндов, с дизассемблированием команд, с оценкой влияния структуры программы на время ее выполнения.
Кодирование команд переходов
Кодирование команд переходов и циклов имеет определенную специфику. Рассмотрим машинное представление этих команд подробнее.
При безусловном внутрисегментном прямом переходе новое значение IP равно сумме 8- или 16-разрядного смещения и текущего значения IP. В качестве текущего значения IP используется адрес команды, записанной вслед за командой перехода. Схема выполнения операции представлена на рис. 8.1, где предполагается, что перед вычислением адреса перехода содержимое IP уже указывает на команду, следующую за командой перехода.
Команда, имеющая 8-разрядное смещение, называется командой короткого перехода и имеет в символической записи после мнемоники команды префикс short. Смещение записывается в дополнительном коде, который перед сложением с текущим значением IP расширяется знаком до 16 разрядов. Таким образом, диапазон адресов переходов для команды короткого перехода составляет -128...+127 байтов относительно текущего значения IP.
Рис. 8.1. Схема внутрисегментного прямого перехода
Пример 1.
Команда JMP short L осуществляет передачу управления команде, помеченной меткой L.
Пусть эта команда перехода записана по адресу 010A. Тогда если метке L соответствует, например, адрес 011A, то смещение в команде перехода будет равно:
011A - (010A+2)=011A-010C=011A+FEF4=0E
Здесь операция вычитания заменена сложением с использованием дополнительного кода отрицательного числа. Перенос за пределы разрядной сетки в операциях, связанных с вычислением смещения, игнорируется.
Машинное представление команды следующее:
Обратим внимание на то, что в качестве текущего значения IP взят адрес команды перехода, увеличенный на 2, так как длина самой команды перехода равна 2 байтам.
Если команда, помеченная меткой L, располагается по адресу 00C1, то смещение будет равно:
00C1-010C=00C1+FEF4=FFB5
Полученное смещение имеет длину 2 байта, что недопустимо для данного формата команды. Но так как старший байт представляет собой знаковое расширение младшего байта (FFB5h = 11111111 10110101b), то это смещение можно закодировать в 1 байте, и команда будет иметь машинное представление: EBB5h.
Если метке L соответствует адрес 0224, то необходимая величина смещения, равная 0224-010C=0118, не может быть записана в 8-разрядном формате. Следовательно, с помощью команды короткого перехода осуществить переход на указанный адрес невозможно.
Пример 2.
По машинному представлению команды перехода можно определить, на какой адрес в сегменте команд будет передано управление. Так команда, имеющая машинный код EB4Ch и расположенная по адресу 0100h, осуществл
infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.40.239 (0.014 с.)