Какова функция дополнительного регистра сопроцессора команды MRC? - PullRequest
3 голосов
/ 07 октября 2011

Цитирование из документации ARM MRC,

MRC{2}<c><q> <coproc>, #<opc1>, <Rt>, <CRn>, <CRm>{, #<opc2>}

, где:

2 Если указано, выбирается кодировка T2 / A2.Если опущено, выбирается кодировка T1 / A1.

<c><q> См. Поля синтаксиса стандартного ассемблера на стр. A8-7.Инструкция ARM MRC2 должна быть безусловной.

<coproc> Имя сопроцессора.Стандартные имена универсальных сопроцессоров: p0, p1,…, p15.

<opc1> - это код операции, специфичный для сопроцессора, в диапазоне от 0 до 7.

<Rt> - ядро ​​ARM назначения.регистр.Этот регистр может быть R0-R14 или APSR_nzcv.Последняя форма записывает биты [31:28] переданного значения в флаги условий N, Z, C и V и задается путем установки поля Rt кодирования в 0b1111.В синтаксисе ассемблера до UAL ПК был выбран вместо APSR_nzcv для выбора этой формы.

<CRn> Регистр сопроцессора, который содержит первый операнд.

<CRm> Является дополнительным источникомили регистр сопроцессора назначения.

<opc2> Является ли специфический для сопроцессора код операции в диапазоне от 0 до 7. Если опущено, <opc2> предполагается равным 0.

Если MRC предназначен для копирования содержимого одного регистра сопроцессора в один регистр ARM, в чем причина CRm?Кроме того, я не совсем уверен, в чем причина opcode, но это имеет меньшее значение.

1 Ответ

3 голосов
/ 07 октября 2011

user786653, возможно, ударил гвоздь по голове с этой ссылкой.

Я знаю, что старый fpu, fpa, использовал интерфейс сопроцессора, и если вы декодируете инструкции с плавающей запятой fpa, я думаю, вы обнаружите, что они совпадают с шаблоном кода операции для универсального сопроцессора (mrc / mcr).

Суть в том, что я не буду разбираться с каждым полем в этой инструкции, некоторые поля, вероятно, не заботятся о сопроцессоре.Процессор ARM и ассемблер не обязательно знают, что вы подключили, и это универсальный способ вставки битовых шаблонов в машинную инструкцию.Вы должны сосредоточиться на конкретном сопроцессоре, с которым вы разговариваете, его TRM, в частности, TRM с соответствующими номерами версий для этой логики (если это возможно, если из ARM), предполагая, что сопроцессор от руки, если это кто-то другой сопроцессор, то используйте их документацию,Надеемся, что поля, используемые каждой операцией в этом сопроцессоре, определены достаточно хорошо.Если они не говорят о том, что означает одно из полей, я предполагаю, что это не важно.Вырежьте и вставьте их строки mrc / mcr в руководство, если они есть, если не в Google, возможно, найдите какой-то уже хорошо используемый код, вырезайте и вставляйте этот шаблон и / или попробуйте разные вещи для неопределенных полей и посмотрите, изменит ли это операцию.

Как правило, хотя определения полей mrc / mcr не заданы в камне, поставщик может создать сопроцессор и делать с этими полями все, что он пожелает.Как и в случае с FPA, возможно, потребуется изменить ассемблер / дизассемблер, чтобы создать новое расширение для набора команд.ядро манипулятора может заботиться о самом регистре ARM. Если для самого интерфейса сопроцессора имеется TRM, я не удивлюсь, если в считывании сопроцессора есть управляющая линия, которая сообщает рычагу о необходимости или не изменять указанный регистр рычага на основе сопроцессора.за рулем этого сигнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...