КОДИРОВАНИЕ СПОСОБА АДРЕСАЦИИ


Поля MOD и R/M определяют один из возможных способов адре­сации данного:

1) в случае, когда поле MOD равно 11, задается регис­тровый способ адресации и поле R/M определяет регистр, в котором находится операнд (см. описание поля REG);

2) в случае, когда поле MOD равно 01 или 10, задается относительный способ адресации операнда в памяти соответ­ственно со смещением один (DISP-LO) и два байта (DISP-LO, DISP-HI); какой из относительных способов адресации (базо­вый индексный или индексный) используется, а также к како­му сегменту (стека или данных) будет осуществлено обраще­ние, определяется полем R/M (см. табл. 2.1);

КОДИРОВАНИЕ СПОСОБА АДРЕСАЦИИ

3) в случае, когда поле MOD равно 00, смещение (DISP) в команде отсутствует и поле R/M определяет индексный или базовый индексный способ адресации; исключением явля­ется случай, когда R/M = НО; при этом задается прямой спо­соб адресации и эффективный адрес операнда равен двухбай­товому смещению (DISP-LO, DISP-HI), непосредственно следу­ющему за кодом операции.

Особенностью перечисленных способов адресации данных является то, что все они неявно предполагают сегментный ре­гистр, который будет использоваться для формирования физи­ческого адреса. Существует такое правило: если в формиро­вании эффективного адреса участвует регистр ВР, то неявно подразумевается обращение в сегмент стека (кроме, конечно, случая, когда MOD = 00 и R/M = 110). Если регистр ВР не используется, то по умолчании подразумевается сегмент дан­ных.

Для явного задания сегментного регистра при формирова­нии физического адреса памяти может использоваться команда замены сегмента (префикс замены сегмента). Эта команда (см. приложение) задает для следующей за ней командой использо­вание не сегментного регистра по умолчании, а сегментного регистра, задаваемого в самом префиксе. Если команде пред­шествует префикс замены сегмента, при обращении к данным в процессе ее выполнения участвует сегментный регистр SR. Для режимов адресации, представленных в табл. 2.1, регистр DS может быть заменен на CS, SS или ES; а регистр SS при участии в адресации регистра ВР — на CS, DS или ES.

Если, например, перед командой, операнд которой по умолчании располагается в сегменте данных, использован пре­фикс замены сегмента на дополнительный сегмент данных, то обращение к операнду будет осуществляться в дополнительный сегмент по адресу ES:EA, где ЕА — эффективный адрес, определяемый режимом адресации данных.

Чтобы глубже разобраться в машинных командах мик­ропроцессора К1810ВМ86 и кодировании различных способов адресации данных, рассмотрим команду сложения ADD. В команде сложения ADD содержимое операнда-источника при­бавляется к содержимому операнда—получателя (приемника) и сумма заменяет содержимое операнда-получателя. Для мне­монического представления команды используется следующая форма:

<операция> <операнд— приемник>, <операнд—источник>

В качестве операнда—приемника и операнда—источника могут кодироваться в команде и задаваться в мнемоническом представлении следующие операнды:

REG8 — 8-битовый регистр (байт);

R8/M8 — 8-битовый регистр или ячейка памяти (байт);

DATA8 — непосредственное данное (байт);

REG16 — 16-битовый-регистр (слово);

R16/M16 — 16-битовый регистр или ячейка памяти (слово);

DATA16 — непосредственное данное (слово).

Например, для операции сложения возможны следующие варианты команд:

ADD REG8, R8/M8 — сложить 8-разрядный регистр REG8 с регистром R8 или адресуемым ячейкой памяти (байт) М8, которые определяются способом адресации, задаваемым полями MOD и REG в команде; результат поместить в исходный регистр REG8;

ADD R16/M16, DATA16 — сложить содержимое 16-разрядного регистра R16 или содержимое адресуемой ячейки памяти (слово) Ml6, определяемые способом адресации, задаваемым полями MOD и REG, с непосредственными данными DATA16 (слово); результат поместить в тот же регистр R16 или в ячейку памяти Ml6;

ADD R16/M16, DATA8 — сложить содержимое 16-разряд­ного регистра R16 или содержимое адресуемой ячейки памяти (слово) М16, определяемой .способом адресации, задаваемым полями MOD и REG, с непосредственными данными DATA8 (байт), расширенными со знаком до 16 бит (слово); результат поместить в тот же регистр R16 или в ячейку памяти Ml6.

В зависимости от режима адресации команда сложения ADD с непосредственным способом адресации одного из опе­рандов может принимать одну из форм, представленных на рис. 2.10.

ADD

a) 10000000 11000110 00011111 (80 C6 IF)

(C=0, W=0, MOD=11, R/M=110, DATA-3.1)

ADD DH, 31 (ADD REGS, DATA8)

Сложить содержимое регистра DH с непосредственными данными (байт) ц результат поместить в DH (регистровый и непосредственный спо­собы адресации).

б) 10000011 11000110 11110100 (83 С6 F4)

(C=l. W=l, MOD=11, R/M-110. DATA—12)

ADD SI, -12 (ADD REG 16, DATA8)

Сложить содержимое регистра SI с непосредственными данны­ми (байт), расширенных со знаком до слова, и результат поместить в SI (регистровый и непосредственный способы адресации).

в) 10000001 00000110 11111111 00000001 11 ПО 100 11111110

(81 06 FF 01 F4 FE)

(С=0, W=l, MOD=00, R/M=110, DISP=511, DATA=-268)

ADD [511], -268- (ADD M16, DATA16)

Сложить содержимое регистра ячейки памяти, эффективный адрес которой равен DISP, с непосредственными данными (слово), и результат поместить в эту ячейку памяти (прямой в сегмент данных и непосредствен­ный способы адресации).

Рис. 2.10. Формат команды сложения ADD

адресуемого операнда с непосредственными данными

Загрузка...