What is the function of the additional coprocessor register of the MRC command?
08:16 07 Oct 2011

Quoting from the ARM MRC documentation,

MRC{2} , #, , , {, #}

where:

2 If specified, selects encoding T2 / A2. If omitted, selects encoding T1 / A1.

See Standard assembler syntax fields on page A8-7. An ARM MRC2 instruction must be unconditional.

The name of the coprocessor. The standard generic coprocessor names are p0, p1, …, p15.

Is a coprocessor-specific opcode in the range 0 to 7.

Is the destination ARM core register. This register can be R0-R14 or APSR_nzcv. The last form writes bits [31:28] of the transferred value to the N, Z, C and V condition flags and is specified by setting the Rt field of the encoding to 0b1111. In pre-UAL assembler syntax, PC was written instead of APSR_nzcv to select this form.

Is the coprocessor register that contains the first operand.

Is an additional source or destination coprocessor register.

Is a coprocessor-specific opcode in the range 0 to 7. If omitted, is assumed to be 0.

If MRC is meant to copy contents of a single coprocessor register into a single ARM register, what is the reason for CRm? Also, I'm not quite sure what the reason for an opcode is either, but that's of lesser relevance.

assembly arm