Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная > Обзоры по типам > Микроконтроллеры > ARM > Система команд

реклама

 




Мероприятия:




PSR пересылки (MRS, MSR)

Эти команды будут выполнены, если условие истинно. Все различные условия их выполнения перечислены в табл. 6. Команды MRS и MSR являются одной из форм команд обработки данных и реализуются с помощью команд TEQ, TST, CNM и CMP, но без установленного флага S. Машинный код обеих команд приведен на рис.20.

Эти команды позволяют работать напрямую с регистрами CPSR и SPSR. Команда MRS позволяет скопировать содержимое регистров CPSR или SPSR_<режим> в любой из регистров общего назначения. В свою очередь, команда MSR выполняет обратные действия: копирование содержимого любого их регистров общего назначения в регистры CPSR или SPSR_<режим>.

Кроме того, команда MSR позволяет записать константу в поля только флагов условий (N, Z, C и V) регистров CPSR и SPSR_<режим> без воздействия на их остальные биты (управляющие биты). В этом случае старшие четыре бита 32-битной константы записываются в соответствующие четыре старших бита необходимого PSR регистра.

Операнды команд

В непривилегированном режиме управляющие биты регистра CPSR защищены от всяких изменений, поэтому могут быть изменены только флаги условий этого регистра. В свою очередь, в привилегированном режиме указанные биты полностью доступны для изменений.

Следует отметить тот факт, что в программе пользователя недопустимо изменение состояния бита T регистра CPSR, в противном случае процессор окажется в непредсказуемом состоянии.

Доступ к регистру SPSR зависит от режима процессора. Например, регистр SPSR_FIQ доступен только тогда, когда процессор находится в режиме FIQ.

Недопустимо использование регистра R15 (PC) в качестве регистра-источника или регистра-приемника в полях этих команд.

Также бесполезно пытаться получить доступ к регистру SPSR в непривилегированном режиме - в этом режиме указанный регистр не существует.

PSR пересылки
Рис. 20. PSR пересылки

Зарезервированные биты

В ядре ARM7TDMI определены только 12 бит регистра PSR: N, Z, C, V, I, F, T и M[4:0]. Остальные биты - зарезервированы для новых версий процессоров. На рис. 9 приведено полное описание всех битов PSR.

С целью максимальной совместимости между программами для ARM7TDMI и новых версий процессоров на основе ядра ARM, должны соблюдаться следующие правила:

  1. зарезервированные биты должны сохраняться в неизменном состоянии при изменении содержимого PSR;
  2. программа не должна учитывать зарезервированные биты PSR при проверке его состояния (или его флагов), так как в новых версиях процессоров эти биты уже могут быть реализованы;

Когда изменяются управляющие биты регистра PSR, должны использоваться операции типа чтение-модификация-запись. Это реализуется в следующем порядке:

  1. соответствующие биты регистра PSR копируются в один из регистров общего назначения Rd с помощью команды MRS;
  2. выполняется модификация необходимых битов в выбранном регистре Rd;
  3. производится запись этого модифицированного значения из Rd обратно в регистр PSR, используя команду MSR.

Примеры

Следующая ниже последовательность команд вызывает смену режима работы ядра:

MRS     R0,CPSR          ; Сохранить копию CPSR в R0
BIC     R0,R0,#0x1F      ; Очистка битов режима ядра
ORR     R0,R0,#new_mode  ; Выбор нового режима ядра (new_mode)
MSR     CPSR,R0          ; Записать в CPSR модифицированное значение

В случае, когда необходимо всего лишь изменить флаги условия выполнения в PSR, то необходимое значение может быть записано непосредственно в это поле флагов без воздействия на остальные управляющие биты PSR. Следующая ниже команда устанавливает флаги N, Z, C и V:

MSR    CPSR_flg,#0xF0000000  ; Установить все флаги 
                             ; не меняя значения зарезервированных флагов
                             ; и битов управления состоянием ядра.
Недопустима запись всей 8-битной константы в регистр PSR, так как в этом случае невозможно сохранить состояние зарезервированных битов.

Число машинных тактов выполнения

Команды PSR пересылок выполняются за 1S тактов, где S зависит от типа машинных тактов.

Синтаксис в ассемблере

  1. MRS - пересылка содержимого PSR в регистр общего назначения
    	MRS{cond} Rd,<psr>
    
  2. MSR - пересылка содержимого регистра в PSR.
    	MRS{cond} <psr>,Rm
    
  3. MSR - пересылка содержимого регистра только в поле флагов PSR.
    	MRS{cond} <psrf>,Rm
    

    В регистре Rm только старшие четыре бита определяют воздействие на флаги PS.

  4. MSR - пересылка константы только в поле флагов PSR.
    	MRS{cond} <psrf>,<#выражение>
    

Выражение должно быть вычисляем 32-битным числом, у которого старшие четыре бита определяют то, какие флаги PSR будут установлены/сброшены.

{cond}: двухсимвольная мнемоника условия выполнения команды (см. табл. 6).
Rd и Rm: выражения, которые определяют номер регистра общего назначения (кроме регистра R15).
<psr>: один из регистров CPSR, CPSR_all, SPSR, SPSR_all (CPSR и CPSR_all, SPSR и SPSR_all - синонимы).
<psrf>: регистр CPSR_all или регистр SPSR_all.
<#выражение>: если это поле используется, то ассемблер попытается сгенерировать команду сдвига 8-битной константы в соответствии с указанным выражением. Если это невозможно, то возникнет ошибка.

Примеры

В непривилегированном режиме эти команды выполняются следующим образом:

MSR     CPSR_all,Rm             ; CPSR[31:28] <- Rm[31:28]
MSR     CPSR_flg,Rm             ; CPSR[31:28] <- Rm[31:28]
MSR     CPSR_flg,#0xA0000000    ; CPSR[31:28] <- 0xA
                                ;(установить N,C; сбросить Z,V)
MRS     Rd,CPSR                 ; Rd[31:0] <- CPSR[31:0]

В привилегированном режиме эти команды выполняются следующим образом:

MSR     CPSR_all,Rm           ; CPSR[31:0] <- Rm[31:0]
MSR     CPSR_flg,Rm           ; CPSR[31:28] <- Rm[31:28]
MSR     CPSR_flg,#0x50000000  ; CPSR[31:28] <- 0x5
                              ;( установить Z,V; сбросить N,C)
MRS     Rd,CPSR               ; Rd[31:0] <- CPSR[31:0]
MSR     SPSR_all,Rm           ; SPSR_<режим>[31:0]    <- Rm[31:0]
MSR     SPSR_flg,Rm           ; SPSR_<режим>[31:28] <- Rm[31:28]
MSR     SPSR_flg,#0xC0000000  ; SPSR_<режим>[31:28] <- 0xC
                              ;( установить N,Z; сбросить C,V)
MRS     Rd,SPSR               ; Rd[31:0] <- SPSR_<режим>[31:0]

<---- Вернуться к Системе команд --->






 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники