mov cr
格式
(qp)movr 1 = cr 3 from_form M33
(qp)movcr 3 = r2 to_form M32
說明
源運算元複製到目標暫存器。
對於 from_form,將讀取 cr3 指定的控制暫存器,並將值複製到 r1。
對於 to_form,將讀取 GR r2,並將值複製到 CRcr3。
控制暫存器只能在最高特權級別訪問。PSR.ic 位等於一時,讀取或寫入中斷控制暫存器 (CR16-CR25) 將導致“非法操作”錯誤。
操作
if (PR[qp]) {
if (is_reserved_reg(CR_TYPE, cr 3 )
|| to_form && is_read_only_reg(CR_TYPE, cr 3 )
|| PSR.ic && is_interruption_cr(cr 3 ))
{
illegal_operation_fault();
}
if (from_form)
check_target_register(r 1 );
if (PSR.cpl != 0)
privileged_operation_fault(0);
if (from_form) {
if (cr 3 == IVR)
check_interrupt_request();
if (cr 3 == ITIR)
GR[r 1 ] = impl_itir_cwi_mask(CR[ITIR]);
else
GR[r 1 ] = CR[cr 3 ];
GR[r 1 ].nat = 0;
} else { // to_form
if (GR[r 2 ].nat)
register_nat_consumption_fault(0);
if (is_reserved_field(CR_TYPE, cr 3 , GR[r 2 ]))
reserved_register_field_fault();
if (cr 3 == EOI)
end_of_interrupt();
tmp_val = ignored_field_mask(CR_TYPE, cr 3 , GR[r 2 ]);
CR[cr 3 ] = tmp_val;
if (cr 3 == IIPA)
last_IP = tmp_val;
}
}
中斷
“非法操作”錯誤
“暫存器 NaT 使用”錯誤
“特權操作”錯誤
“保留的暫存器/欄位”錯誤
序列化
控制暫存器的讀數反映以前的所有指令組與中斷的結果。
一般情況下,對控制暫存器的寫入不立即影響隨後的指令。在相關指令使用修改過的資源之前,軟體必須發出序列化操作。控制暫存器寫入不隱式地與相應的控制暫存器讀取同步,因此需要進行數據序列化。