Соколов Ю.П. Микроконтроллеры семейства MCS-51 (2002) (1095895), страница 9
Текст из файла (страница 9)
Методы адресацииКаждая команда сообщает процессору выполняемую операцию иметоды доступа к операндам. Код команды имеет несколько полей,имеющих определенное функциональное назначение. Важнейшими полями любой команды являются код операции (КОП), определяющийдействие команды, и адресная часть. Поля адресной части содержатинформацию об адресах операндов и результата операции, а в некоторых случаях информацию об адресе следующей команды.Если адрес указывает на номер ячейки памяти, в которой находится или куда заносится операнд , то его называют прямым адресом.Методы адресации представляют собой набор механизмов доступа к операндам.
Одни из них просты, приводят к компактному форматукоманды и быстрому доступу к операнду, но имеют ограниченный объем доступных ресурсов. Другие позволяют оперировать всеми имеющимися в системе ресурсами, но команда получается длинной, на ее40ввод и выполнение тратится много времени. Набор методов адресациив каждой системе команд является компромиссным сочетанием известных механизмов адресации, выбранных проектировщиками архитектуры исходя из набора решаемых задач.Ниже приведены основные методы адресации, используемые всистеме команд семейства MCS-51.Неявная адресация. В команде не содержится явных указаний обадресе участвующего в операции операнда или адресе, по которомупомещается результат операции, но этот адрес подразумевается.
В командах наиболее часто неявно адресуется аккумулятор как приемникрезультата операции. Например, результат сложения содержимого аккумулятора (A) и регистра R1 текущего банка данных командойADD A,R1 записывается в неявно адресуемый аккумулятор. Вся указанная команда занимает в памяти один байт, в то время как адрестолько аккумулятора (8Eh области SFR) содержит один байт.Непосредственная адресация. В поле адреса команды содержится не адрес операнда, а непосредственно сам операнд. На непосредственную адресацию указывает специальный символ # перед числом. Например, командой MOV A,#15h шестнадцатеричное число 15(второй байт команды) загружается в аккумулятор. В системе команднепосредственная адресация обозначена как #data, где data – число(data = 00h...FFh).Прямая адресация.
В поле адреса команды указан прямой адресячейки памяти данных, в которой находится или куда заносится операнд. Например, командой MOV A,15h содержимое ячейки DSEG с адресом 15h загружается в аккумулятор. Ячейка памяти имеет прямуюадресацию, а аккумулятор - неявную. В зависимости от местонахождения адресуемого операнда, прямая адресация подразделяется на прямую регистровую и абсолютную.Прямая регистровая адресация. В поле адреса команды указанпрямой адрес регистра текущего регистрового банка.
Регистров в каждом банке восемь, и для их адресации необходим трехбитовый прямойадрес. В мнемонике команд адресуемый регистр обозначен Rn, гдеn=0...7. Все поля команды умещаются в один байт. Такую адресациюназывают короткой. Например, MOV R4,R1.Прямая абсолютная адресация позволяет обратиться к любойячейке DSEG и области SFR. Прямой адрес в этом случае занимаетодин байт, а команда – два байта.
В системе команд байт прямого адреса обозначен словом direct (прямой) (direct = 00h…FFh). Например,команда MOV 80h,R2 (или MOV P0,R2) загружает содержимое регистра R2 текущего банка данных в порт Р0 (ячейка 80h области SFR). Еслиоба операнда имеют прямую абсолютную адресацию, то команда становится трехбайтовой (Например, MOV 80h,15h).Косвенная адресация. В поле адреса указан адрес ячейки памяти, в которой находится прямой адрес операнда. В системе команд накосвенную адресацию указывает специальный символ @. Свойством41хранить прямой адрес обладают регистры R0 и R1 (@Ri, i = 0,1) каждого регистрового банка. Например, если содержимое регистра R1 текущего банка регистров равно 15h, то команда MOV A,@R1 выполнит тоже действие, что и приведенная выше команда MOV A,15h – загрузитсодержимое ячейки памяти DSEG с адресом 15h в аккумулятор.
Однакокоманда MOV A,@R1 однобайтовая, но самое главное, здесь имеетсявозможность программным способом изменять адрес, изменяя содержимое регистра R1.Относительная адресация. При относительной адресации прямой адрес формируется путем сложения базового адреса с адреснымполем команды. В качестве базового адреса используется содержимоепрограммного счетчика, а адресное поле команды представляет собойвосьмиразрядное смещение rel (relative - относительный).
Число rel интерпретируется командой как целое со знаком, представленное в дополнительном коде. Диапазон его представления - (-128...+127). Приопределении числа rel следует учесть, что программный счетчик указывает на следующую, подлежащую выполнению, команду. Относительная адресация широко используется в командах передачи управления,что позволяет создавать перемещаемые программные модули. Команды передачи управления с относительной адресацией позволяюторганизоватьветвлениеотносительнотекущегоположенияпрограммного счетчика PC в обе стороны на (-128...+127) байт.В программах на языке ассемблера в поле смещения можно указать метку, на которую необходимо перейти. В результате трансляцииассемблер вычислит величину смещения, если она не превышает(-128…+127).
В противном случае будет выдано сообщение об ошибке.Базовая адресация представляет разновидность относительнойадресации. Прямой адрес в этом случае формируется путем сложенияадреса, указанного в команде, с содержимым базового регистра, в котором хранится базовый адрес. Функцию базового регистра в семействе MCS-51 выполняет регистр-указатель данных DPTR или программный счетчик PC.
Этот тип адресации особенно удобен при обработкетаблиц и массивов данных. В командах MOVC A,@A+DPTR иMOVC A,@A+PC 16-разрядный прямой адрес формируется как суммасодержимого регистров DPTR и A или PC и A.Страничная адресация. При использовании страничной адресации память разбивается на ряд страниц одинаковой длины. Адресациястраниц осуществляется отдельным регистром страниц, а адресацияячеек памяти внутри страницы – адресом, содержащимся в команде.Прямой адрес формируется конкатенацией (присоединением) адресастраниц и адреса ячейки памяти внутри страницы. В командеMOVX A,@Ri функцию регистра страниц выполняет порт P2 (старшийбайт адреса), а содержимое регистра Ri (младший байт адреса) задаетадрес внутри страницы.
При этом память разбивается на 256 страницпо 256 ячеек в каждой из них.42Стековая адресация используется в безадресных командах ипредставляет собой сочетание автоинкрементного и автодекрементного способов адресации, работающее по принципу LIFO (Last Input – FirstOutput)- «последним вошел – первым вышел». Стек располагается вDSEG и растет в сторону увеличения адреса. Адрес вершины стека содержится в указателе стека SP.
При записи байта в стек сначала выполняется инкремент содержимого SP, а затем по этому адресу производится запись. При чтении байта из стека сначала выполняется чтение по адресу, на который указывает SP, а затем - декремент SP. Прииспользовании стека необходимо учитывать, что глубина стека (максимальное число ячеек памяти, занятых под стек) аппаратными средствами не контролируется. При чрезмерном увеличении стека могут бытьзаняты не предназначенные для него ячейки памяти с потерей информации в них. Аппаратно стек используется для сохранения адреса возврата при обслуживании прерывания.2.7.2.
Система команд семейства MCS-51Система команд представлена в таблицах П2.1...П2.6 приложения 2. В таблицах указаны наименование команды, ее мнемоника, двоичный код операции, влияние выполняемой команды на флаги C, OV,AC и P, длина команды в байтах (Б) и время выполнения в машинныхциклах (Ц), а также содержание преобразования, выполняемого командой. В качестве разделителя адресных полей в командах используетсязапятая. Для улучшения читаемости можно добавить пробелы послезапятой, если их поддерживает используемый ассемблер.Все множество команд можно разбить на 5 групп: операции передачи данных, арифметические операции, логические операции, операции с битами и операции передачи управления.Группа команд операций передачи данных (таблица П2.1) содержит команды MOV (передачи данных между DSEG и RSEG), MOVC(между CSEG и A), MOVX (между XSEG и A), команды обращения к стеку PUSH и POP, а также две команды обмена XCH и XCHD.
Все команды передачи данных, у которых приемником является аккумулятор, устанавливают флаг паритета P содержимого аккумулятора, а команды спрямой адресацией, у которых приемником является регистр PSW, изменяют все флаги. Наиболее емкой является команда MOV, использующая четыре способа адресации: прямой регистровый (A, Rn, DPTR),прямой (direct), косвенный (@Ri), непосредственный (#data, #data16).Второй операнд команды является источником, первый – приемником.Для указания приемника служат три способа адресации (кроме непосредственного), а для указания источника все четыре. Трехбайтоваякоманда MOV direct,direct обеспечивает пересылку между двумя любыми ячейками памяти (DSEG и SFR), включая RSEG.
Для обмена сRSEG предусмотрены специальные двух- и однобайтовые форматы:MOV Rn,directMOV A,RnMOV direct,RnMOV Rn,A43Специальная команда MOV DPTR,#data16 позволяет загрузить16-разрядный указатель DPTR значением data16.Команда MOVC позволяет считывать информацию из программной памяти CSEG не в регистр команд устройства управления, а в аккумулятор операционного устройства. В команде используются дваспособа адресации: по базе DPTR и относительно PC.
В обоих случаяхцелое без знака смещение (индекс) хранится в аккумуляторе. Приемником результата также служит аккумулятор. Команда позволяет выполнять быструю перекодировку по таблицам.Обращение к внешней памяти осуществляется с помощью команды MOVX. Обмен производится по байтам между аккумулятором ивнешним XSEG. Ячейка XSEG может быть адресована двумя способами: косвенно через 16-разрядный указатель DPTR и странично косвенно через 8-разрядный указатель Ri, i=0,1. В последнем случае регистром страниц служит регистр P2.Безадресные команды PUSH и POP обеспечивают передачу данных между DSEG, RSEG и SFR.Команда обмена XCH обеспечивает двухсторонний обмен байтами, а команда XCHD - младшими тетрадами байтовых операндов.Группа команд арифметических операций (таблица П2.2) содержит команды сложения ADD, сложения с учетом переноса ADDC,вычитания с учетом заема SUBB, увеличения и уменьшения на единицуINC и DEC, десятичной коррекции сложения в двоично-десятичном(BCD) коде упакованного формата, умножения MUL и деления DIV.Операции выполняются над беззнаковыми целыми числами.