Руководство пользователя MSP430 (1041606), страница 6
Текст из файла (страница 6)
Таблица 3.3 Режимы адресации операндов источника/получателя
As/Ad | Режим адресации | Синтаксис | Описание |
00 / 0 | Регистровый режим | Rn | Содержимое регистра является операндом |
01 / 1 | Индексный режим | X(Rn) | Значение (Rn+X) указывает на операнд. X сохранен в следующем слове |
01 / 1 | Символьный режим | ADDR | Значение (PC+X) указывает на операнд. X сохранен в следующем слове. Использован индексный режим X(PC) |
01 / 1 | Абсолютный (безусловный) режим | &ADDR | Слово, следующее за командой, содержит абсолютный адрес. X сохранен в следующем слове. Использован индексный режим X(SR) |
10 / - | Косвенный регистровый режим | @Rn | Содержимое Rn использовано как указатель на операнд |
11 / - | Косвенный автоинкремент | @Rn+ | Содержимое Rn использовано как указатель на операнд. Содержимое Rn впоследствии увеличивается на 1 для байтовых команд и на 2 для команд-слов. |
11 / - | Прямой (непосредственный) режим | #N | Слово, следующее за командой, содержит непосредственную константу N. Использован косвенный автоинкрементный режим @PC+ |
Семь упомянутых способов адресации подробно рассматриваются в следующих разделах. В большинстве примеров показаны схожие режимы адресации для источника и получателя, но в команде возможны любые правильные комбинации способов адресации источника и получателя.
Примечание: использование меток EDE и TONI |
3.3.1 Регистровый режим
Таблица 3.4. Описание регистрового режима
Код ассемблера | Содержимое ПЗУ |
MOV R10,R11 | MOV R10, R11 |
Длина: | Одно или два слова | ||||||||||||||||||||||
Операция: | Пересылка содержимого R10 в R11. Содержимое R10 не изменяется. | ||||||||||||||||||||||
Комментарий: | Действительно для источника и получателя. | ||||||||||||||||||||||
Пример: | MOV R10,R11
|
Примечание: данные в регистрах |
3.3.2 Индексный режим
Таблица 3.5. Описание индексного режима
Код ассемблера | Содержимое ПЗУ |
MOV 2(R5),6(R6) | MOV X(R5),Y(R6) |
Длина: | Два или три слова |
Операция: | Пересылка содержимого с исходного адреса (равного сумме содержимого R5 + 2) по адресу назначения (содержимое R6 + 6). Регистры источника и получателя (R5 и R6) не изменяются. В индексном режиме программный счетчик автоматически инкрементируется таким образом, что выполнение программы продолжается со следующей команды. |
Комментарий: | Действительно для источника и получателя |
Пример: | MOV 2(R5),6(R6): |
3.3.3 Символьный режим
Таблица 3.6. Описание символьного режима.
Код ассемблера | Содержимое ПЗУ |
MOV EDE,TONI | MOV X(PC),Y(PC) |
Длина: | Два или три слова |
Операция: | Пересылка содержимого с исходного адреса EDE (равного сумме содержимого PC + X) по адресу назначения TONI (содержимое PC + Y). Слова после команды содержат разницу между PC и адресами источника или получателя соответственно. Ассемблер автоматически вычисляет и вставляет смещения X и Y. В символьном режиме программный счетчик автоматически инкрементируется так, что выполнение программы продолжается со следующей команды. |
Комментарий: | действительно для источника и получателя |
Пример: | MOV EDE,TONI ;Адрес источника EDE=0F016h |
3.3.4 Абсолютный режим
Таблица 3.7. Описание абсолютного режима
Код ассемблера | Содержимое ПЗУ |
MOV &EDE,&TONI | MOV X(0),Y(0) |
Длина: | Два или три слова |
Операция: | Пересылка содержимого с исходного адреса EDE по адресу назначения TONI. Слова после команды содержат абсолютные адреса источника и получателя. В абсолютном режиме программный счетчик автоматически инкрементируется так, что выполнение программы продолжается со следующей команды. |
Комментарий: | Действительно для источника и получателя |
Пример: | MOV &EDE,&TONI ;Адрес источника EDE=0F016h |
Этот режим адресации предназначен главным образом для аппаратных периферийных модулей, расположенных по абсолютным, фиксированным адресам. Они адресуются в абсолютном режиме, что гарантирует переносимость программы (например, при написании позиционно-независимого, переносимого кода).
3.3.5 Косвенный регистровый режим
Таблица 3.8. Описание косвенного регистровый режима
Код ассемблера | Содержимое ПЗУ |
MOV @R10,0(R11) | MOV @R10,0(R11) |
Длина: | Одно или два слова |
Операция: | Пересылка содержимого с исходного адреса (содержится в R10) по адресу назначения (содержится в R11). Регистры не изменяются. |
Комментарий: | Действительно только для операнда источника. В качестве операнда получателя подставляется 0(Rd) |
Пример: | MOV.B @R10,0(R11) |
3.3.6 Косвенный автоинкрементный режим
Таблица 3.9. Описание косвенного автоинкрементного режима
Код ассемблера | Содержимое ПЗУ |
MOV @R10+,0(R11) | MOV @R10+,0(R11) |
Длина: | Одно или два слова |
Операция: | Пересылка содержимого с исходного адреса (содержится в R10) по адресу назначения (содержится в R11). Регистр R10 инкрементируется после выборки на 1 для байтовых операций или на 2 для команд-слов, таким образом указывается следующий адрес без дополнительных действий. Это полезно для обработки таблиц. |
Комментарий: | Действительно только для операнда источника. В качестве операнда получателя подставляется 0(Rd) плюс вторая команда INCD Rd. |
Пример: | MOV.B @R10+,0(R11) |
Автоинкремент содержимого регистра происходит после выборки операнда. Этот процесс показан на рис.3.8.
3.3.7 Прямой режим
Таблица 3.10. Описание прямого (непосредственный) режима
Код ассемблера | Содержимое ПЗУ |
MOV #45h,TONI | MOV @PC+,X(PC) |
Длина: | Два или три слова. |
Операция: | Пересылка непосредственной константы 45h, находящейся в слове, следующем за командой, по адресу назначения TONI. Когда происходит выборка источника, программный счетчик указывает на слово, следующее за командой, и выполняется пересылка содержимого по назначению. |
Комментарий: | Действительно только для операнда источника |
Пример: | MOV #45h,TONI |
3.4 Набор команд
Полный набор команд семейства MSP430 содержит 27 команд ядра и 24 эмулированные команды. Команды ядра – это команды, имеющие уникальный код операции, декодируемый ЦПУ. Эмулированные команды представляют собой инструкции, облегчающие чтение и написание кода, но не имеющие собственного кода операции, поэтому ассемблер автоматически меняет их на эквивалентные команды ядра. Использование эмулированных команд не приводит к увеличению объема кода или снижению производительности.
Существует три формата команд ядра:
-
С двойным операндом
-
С одиночным операндом
-
Команды перехода
Все команды с одним и двумя операндами могут быть командами для работы с байтами или командами для работы со словами, используя, соответственно, расширения «.B» или «.W». Байтовые команды используются для доступа к данным байта или к байту периферийного устройства. Команды-слова используются для доступа к данным слова или к слову периферийного устройства. Если никакое расширение не используется, команда является командой-словом.
Источник и получатель в команде определяются следующими полями:
src | Операнд источника определяется As и S-reg |
dst | Операнд получателя определяется Ad D-reg |
As | Адресные биты, задающие режим адресации, используемые для источника (src) |
S-reg | Рабочий регистр, используемый в качестве источника (src) |
Ad | Адресные биты, задающие режим адресации, используемые для получателя (dst) |
D-reg | Рабочий регистр, используемый в качестве получателя (dst) |
B/W | Операция с байтом или словом: |
Примечание: адрес получателя |
Примечание: использование меток EDE и TONI |
3.4.1 Команды с двойным операндом (Формат I)
На рис.9 показана структура формата команды с двойным операндом.