2016-05-19 13 views
0

UM10398 LPC111x/LPC11Cxx User manual牧師12.3から10年6月2014 Rdを、これらの命令ではLPC111xシリーズは、HighレジスタでMOV命令をサポートしていますか?

を言い、そしてRmが唯一の28.5」の "28.5.5.5.3制限" にR0-R7

を指定する必要があります。 5.5 MOVとMVN」を参照してください。 UM10398で一方

、 "28.5.5.5.5例は、" 彼らにはないのにもかかわらず、

MOVS R0, #0x000B ; Write value of 0x000B to R0, flags get updated 
MOVS R1, #0x0 ; Write value of zero to R1, flags are updated 
MOV R10, R12 ; Write value in R12 to R10, flags are not updated 
MOVS R3, #23 ; Write value of 23 to R3 
MOV R8, SP ; Write value of stack pointer to R8 
MVNS R2, R0 ; Write inverse of R0 to the R2 and update flags 
この例では

R10R12R8SPが使用されていると言います見えるR0-R7

もう一つは、私は​​を読んだとき、私が見つけたことである(SPはUM10398 28.4.1.3コアレジスタによれば、R13に相当すると思われる)

MOV Rdを、Rmの0 1 0 0 0 1 1 0 H1 H2 _ Rm _ _ Rd _

これは、高レジスタがMOV命令で使用できることを示しています。この文書はまた、このMOV Rd, Rm命令について

*

RdのかRmが*高音域でなければならないと言います。

S(フラグ更新あり)の指示はこのドキュメントには記載されていませんが(このドキュメントでは、Sの指示はフラグの更新と言います)、このドキュメントは別のCPU用である必要がありますLPC111xの命令セットがこの文書で説明されているものと似ていることを願って、この文書を参考にして使用しました。結論として

、私は

  • MOV R0, R1(低レジスタにローレジスタ)
  • MOV R8, R1(ハイ・レジスタにローレジスタ)
  • MOV R0, R9(低レジスタへのハイレジスタ)
  • MOV R8, R9を行うことができます(上位レジスタ→上位レジスタ)

LPC111x(または特定のCPUが必要な場合はLPC1114FN28/102)が必要ですか?

答えて

1

LPC1114FN28にARM Cortex-M0コアがあるため、its MOV instructionにはレジスタの低/高の制限はありません。しかし、Thumb命令セットはもともとMOVローからローの命令を持たなかったため、互換性のために、アセンブラはMOV R0、R1のADDS命令を使用することがあります。例えば

私はas -mcpu=cortex-m0 t117.sで次を組み立てる場合:

# .syntax unified 
    .thumb 

    MOV R0, R1 
    MOV R8, R1 
    MOV R0, R9 
    MOV R8, R9 

作成したオブジェクトファイルがobjdump -dでショーとして、以下の手順が含まれています

0: 1c08   adds r0, r1, #0 
    2: 4688   mov  r8, r1 
    4: 4648   mov  r0, r9 
    6: 46c8   mov  r8, r9 

.syntax unifiedディレクティブのコメントを解除し、それを再構築することでは、分解は期待通りに終了する:

0: 4608   mov  r0, r1 
    2: 4688   mov  r8, r1 
    4: 4648   mov  r0, r9 
    6: 46c8   mov  r8, r9 

「これらの命令では、RdとRmはR0〜R7だけを指定する必要があります」という文は、この制限を持つMOVS命令に適用することを意図していたと思います。

関連する問題