3

次のコード スニペットは、Linux v2.6.11 から取得したものです。v3.8 にも同様のものが存在します。

mrs     r13, cpsr
bic     r13, r13, #MODE_MASK
orr     r13, r13, #MODE_SVC
msr     spsr_cxsf, r13                  @ switch to SVC_32 mode

and     lr, lr, #15
ldr     lr, [pc, lr, lsl #2]
movs    pc, lr                          @ Changes mode and branches

実際のファイルについては、次のリンクを確認してください: http://lxr.linux.no/linux+v2.6.11/arch/arm/kernel/entry-armv.S

CPSR のモード ビットに書き込むと、現在の ARM モードを変更できると思います。しかし、(CPSR ではなく) SPSR に書き込むと、どのように SVC_32 モードに切り替わるのでしょうか?

(または) 最後の命令「movs pc, lr」で何かが起こっている。誰かがこれを理解するのを手伝ってくれますか?

4

2 に答える 2

0

SPSRここでVsのCPSR質問に答えています。

CPSRはモード レジスタであり、やuser/systemモードなどの他のモードには存在しません。一方、およびモードに存在します。モード変更がコピーされ、変更されたモードを使用して、プロセッサの現在のステータスを変更する必要があります。ユーザーモードでは使用できません。また、非ユーザー モードで行った変更は有効になりません。fiqirqSPSRfiqirqCPSRSPSRSPSRSPSRCPSR

CPSR - Current Program Status Register
SPSR - Saved Program Status Register
于 2013-03-24T21:25:07.597 に答える