КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Способы указания адресаСпособом адресации операнда называются его различные формы представления в структуре поля команды. Способ адресации зависит от двух факторов: а) от варианта доступа к данным; б) от полноты представления адреса. По варианту доступа к данным различают:
1. Непосредственная адресация (Immediate constants) - поле операнда непосредственно содержит данные, с которыми работает команда. Перед полем операнда (в большинстве случаев) ставится префикс #. 2. Прямая адресация (Direct Addressing) - префикса перед операндом нет. В поле операнда содержится адрес (ad) ячейки памяти, которая содержит данные. Эта адресация используется для внутренней памяти данных. 3. Косвенная адресация (Indirect Addressing) - перед операндом ставится префикс @. В поле операнда содержится адрес указателя - ячейки памяти, содержащей адрес ячейки памяти, которая содержит данные. Данный вид адресации может применяться при обращении к внутренней памяти данных ОЗУ (в качестве указателя могут использоваться регистры R0 и R1), а также к внешней памяти данных и памяти программ (в качестве указателя могут использоваться регистр DPTR). Полнота представления адреса может быть: 1. Полная - в поле операнда находится либо полный элемент данных, либо полный адрес, которые могут иметь формат 1 или 2 байта. 2. Регистровая (неполная) (Register Instruction) - операнд занимает место в байте, содержащем код операции. Он содержит несколько младших бит (1 или 3) полного адреса ячейки памяти, то есть работа осуществляется с усеченным адресным пространством – регистровым банком. Таким образом, усеченный адрес – это номер регистра. В случае прямой адресации используется 3 бита полного адреса, что соответствует размеру регистрового банка 8 регистров (R0-R7). В случае косвенной адресации используется только 1 бит полного адреса, поэтому возможна работа только с регистрами R0 и R1. Достоинство: повышение быстродействия за счет одновременной выборки из памяти программ кода операции и операнда(ов), поэтому часто регистровый банк называют сверхоперативным запоминающим устройством (СОЗУ). 3. Неявная (Register-Specific Instructions) - операнд представляет собой уникальный регистр, операция осуществляется только с ним. В этом случае нет необходимости включать его адрес в программный код. Например, это операции с аккумулятором А и DPTR. Таблица 2
Таким образом, в зависимости от сочетания варианта представления адреса и полноты его указания существуют способы адресации, представленные в таблице 2: 1. Непосредственная полная адресация - когда в поле операнда представлен непосредственно элемент данных, т.е. число над которым выполняется операция, например: команда записи в аккумулятор непосредственного операнда - MOV A, #d (MOV A, #01H), двухбайтовая команда, в которой второй байт представляет непосредственный операнд #d (число 01H). 2. Прямая полная адресация – в поле операнда указывается адрес расположения операнда в памяти, например команда записи в аккумулятор содержимого ячейки памяти данных с прямым адресом - MOV A, ad(MOV A, 21Н), в которой второй байт представляет прямой адрес ad в памяти данных (адрес 21Н). 3. Прямая регистровая адресация – в поле кода операции (!) указывается трехбитный номер регистра rrr = 000÷1112, где расположен операнд. Поле адреса для данного операнда совмещено вместе с кодом операции в одном байте, например: команда инкремента рабочего регистра - INC Rn (00001rrr). Таким образом, изменяя номер регистра rrr, мы можем обращаться к любому из восьми рабочих регистров выбранного банка. 4. Косвенная регистровая адресация - в поле кода операции (!) указывается однобитный номер регистра i = 0÷12, в котором предварительно записан адрес расположения операнда в памяти, т.е. регистр выполняет роль указателя на фактический адрес. Поле адреса для данного операнда совмещено вместе с кодом операции в одном байте, например: команда инкремента ячейки памяти данных адрес которой находится в регистре Ri - INC @Ri (0000011i). Таким образом, изменяя номер регистра i, мы можем использовать регистры R0 и R1 в качестве указателей данных при косвенной адресации. 5. Прямая неявная адресация - код операции команды неявным образом определяет регистр (обычно это аккумулятор А), где находится операнд, например однобайтовая команда инверсии аккумулятора - CPL A. 6. Косвенная неявная адресация - код операции неявным образом определяет регистр (обычно это регистр DPTR, либо сумма (А+ DPTR)), который содержит фактический адрес, например команда относительного косвенного перехода – JMP @A+DPTR. Длина или формат команды зависит от двух факторов: а) от количества операндов, участвующих в операции; б) от полноты представления адреса, т.е. от способа адресации. В соответствии с этим команды микроконтроллера бывают однобайтовые, двухбайтовые и трехбайтовые, например: 1.
команда сложить содержимое аккумулятора и регистра R3 – формат 1 байт; 2. команда переместить (копировать) содержимое ячейки памяти программ с косвенным адресом в аккумулятор – формат 1 байт; 3. команда вычесть с учетом займаиз содержимого аккумулятора содержимое ячейки памяти ОЗУ с прямым адресом 23Н – формат 2 байта; 4. команда переместить (копировать) в регистр R2 8-разрядное число #02Н – формат 2 байта; 5. команда переместить (копировать) в ячейку ОЗУ с косвенным адресом содержимое ячейки ОЗУ с прямым адресом – формат 2 байта; 6. команда переместить (копировать) в ячейку ОЗУ с прямым адресом 20Н содержимое ячейки ОЗУ с прямым адресом 32Н – формат 3 байта; 7. команда переместить (копировать) в регистр DPTR 16-разрядное число #107FH – формат 3 байта.
|