Поиск по сайту: |
|
По базе: |
|
Главная > Обзоры по типам > Микроконтроллеры > ARM > Система команд |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Передача блоков данных (LDM, STM)Эти команды будут выполнены, если условие истинно. Все различные условия их выполнения перечислены в таблице 6. Машинный код обеих команд приведен на рис.27.
Команды передачи блоков данных применяются для чтения (LDM) или записи (STM) любого числа из доступных регистров общего назначения. Обе команды позволяют работать с любыми стековыми моделями памяти: опустошенные или заполненные стеки; "растущие" вверх или вниз стеки. Гибкость этих команд при их применении позволяет быстро и эффективно сохранять или восстанавливать контекст в прерываниях или переключениях задачах (с использованием операционных систем), а также перемещать в памяти большие массивы данных. Перечень доступных регистров Эти команды могут перемещать любой из регистров активного банка, а в непривилегированном режиме программы имеют возможность перемещать регистры из банка или в банк пользователя (см. ниже). Перечень регистров - это 16-битное поле в машинном коде команды, каждый бит которого соотносится с соответствующим регистром общего назначения. Например, если бит 3 этого поля установлен в единицу, то будет перемещено содержимое регистра R3, если сброшен в ноль, то содержимое регистра R3 никуда не будет перемещено. Таким способом можно сформировать любой набор из 16-ти регистров. Но существует единственное ограничение - список не должен быть пустым, т.е. это поле не должно быть заполнено 16-ю нулями. Примечание: в действительности вместо регистра R15 (для команды STM) сохраняется R15+12, т.е. адрес самой команды STM плюс 12. Режимы адресации Адрес передачи определяется содержимым базового регистра (Rn), битом пред/постиндексации (P) и битом направления (U). Регистры передаются в направлении от младшего к старшему, поэтому R15 (если он есть в списке) будет всегда передан в последнюю очередь. Кроме того, порядок размещения регистров таков, что младший регистр будет сохранен (загружен) по младшему адресу в памяти. На рис. 28…31 изображен порядок передачи регистров, используемых адресов и содержимого этих регистров до и после выполнения команд. Согласно рисункам, R1, R5 и R7, при Rn=0x1000 и требуется пост-модификация базового адреса (W=1). Во всех случаях, где не требуется модификация базового адреса (W=0), в Rn сохраниться начальное значение 0x1000, кроме случая, когда этот регистр есть в списке передаваемых в команде множественной загрузки, то тогда содержимое Rn будет перезаписано новым прочитанным значением. Выравнивание адресов Адрес, указанный в команде, должен быть обязательно выровнен по границе слова (32 бита), иначе команда не будет выполнена. Однако младшие 2 бита этого адреса могут быть использованы системой управления памятью.
Применение бита S Если в командах LDM/STM установлен бит S, то его значение еще зависит от наличия R15 в списке передаваемых регистров и от типа самой команды. Бит S может быть установлен только в тех командах, которые будут выполняться в привилегированном режиме.
Использование R15 в качестве базового регистра Использование регистра R15 в качестве базового регистра (Rn) недопустимо для обеих команд LDM и STM. Включение базового регистра в список регистров Если в команде используется бит перезаписи базового регистра (Rn), то само содержимое этого регистра будете перезаписано в конце второго машинного такта при выполнении самой команды. Во время выполнения команды STM первый регистр из списка записывается в начале второго такта. Поэтому (для команды STM), если в список передаваемых регистров включен базовый регистр Rn, который помимо того еще и является первым передаваемым в списке регистров, то в реальности будет передано предыдущее неизмененное значение Rn, т.к. этот регистр будет модифицирован после того, как будет передан. Для команды LDM, если Rn есть в списке регистров, прежнее содержимое базового регистра будет всегда перезаписано новым прочитанным значением. Прерывания во время передачи данных (data aborts) Чтение или запись по существующему адресу может вызвать проблемы для систем управления памятью. Например, в системах с применением виртуальной памяти запрашиваемые данные могут отсутствовать в физической памяти. Диспетчер памяти может сообщить об этом процессору, вызвав исключительную ситуацию ABORT. В результате чего системное приложение должно решить эту проблему и перезапустить ту команду, выполнение которой вызвало исключительную ситуацию. Прерывания во время выполнения команды STM Если во время выполнения команды произошло критическое прерывание (abort exception), то ядро ARM7TDMI не сразу передаст управление обработчику прерывания, а только после того, как полностью завершит команду. При этом диспетчер управления памятью должен самостоятельно позаботиться о безошибочной записи данных в память. Только после смены внутреннего состояния процессора произойдет модификация базового регистра (если в команде разрешена его перезапись), при этом состояние этого регистра может быть восстановлено только программным путем (после того, как будет решена причина прерывания) перед тем, как эту команду можно будет вновь выполнить. Прерывания во время выполнения команды LDM Когда во время выполнения команды чтения блока данных произойдет критическое прерывание, то ядро ARM7TDMI модифицирует эту команду таким образом, чтобы было возможно восстановить прежнее состояние регистров.
После того, как управление будет передано обработчику критической ситуации (abort), необходимо программным путем восстановить прежнее значение базового регистра (и решить причину прерывания) перед тем, как повторно выполнить эту команду. Число машинных тактов при выполнения Обычная команда LDM выполняется за nS + 1N + 1I, а команда LDM PC - за (n+1)S + 2N + 1I машинных тактов, где S, N и I зависят от типа машинных тактов. STM выполняется за (n+1)S + 2N машинных тактов, где n - число перемещаемых слов. Синтаксис в ассемблере <LDM|STM>{cond}<FD|ED|FA|EA|IA|IB|DA|DB>Rn{!},<Rlist>{^} где:
Названия режимов адресации Для каждого режима адресации существует своя мнемоника в ассемблере, в зависимости от необходимости использования стеков. Соответствия между мнемониками и состояниями битов команд приведены в табл. 10. Таблица 10. Названия режимов адресации
Суффиксы FD, ED, FA, EA определяют пред/пост-индексацию, при этом бит U определяет направление индексации. Суффиксы F и E определяют "полный" или "пустой" стек, например, будет ли произведена индексация до или после записи в стек. Суффиксы A и D определяют направление роста стека. Если стек растет вверх (возрастающий), то команда STM вызовет рост стека вверх, а команда LDM - вниз. Если стек растет вниз (убывающий), то - наоборот. Суффиксы IA, IB, DA, DB формируют передачи, в которых не требуется работа со стеками, т.е. требуется просто Постинкремент, Преинкремент, Постдекремент и Предекремент. Примеры
Нижеследующая последовательность команд может быть использована для сохранения состояния регистров перед вызовом подпрограммы, и восстановления их состояния после выхода из подпрограммы:
<---- Вернуться к Системе команд ---> Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|