UM10398 LPC111x/LPC11Cxx 用户手册修订版 12.3 — 2014 年 6 月 10 日说
在这些说明中,Rd 和 Rm 只能指定 R0-R7
在“28.5.5.5 MOV 和 MVN”中的“28.5.5.5.3 限制”中。
另一方面,UM10398 中的“28.5.5.5.5 Example”说
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
在这个例子中R10
,R12
,R8
和SP
被使用,尽管它们看起来并不R0-R7
。(SP
似乎相当于R13
,根据 UM10398 28.4.1.3 核心寄存器)
还有一件事是,当我阅读re-ejected-thumbref2.pdf时,我发现
MOV Rd, Rm 0 1 0 0 0 1 1 0 H1 H2 _ Rm _ _ Rd _
这表明高位寄存器可用于MOV
指令。该文件还说
Rd 或 Rm 必须是 *high 寄存器*
关于这个MOV Rd, Rm
指令。
尽管带有S
(带有标志更新)的说明不在本文档中(在本文档中没有说明S
更新标志)并且本文档应该用于另一个 CPU(可能在 GBA 中使用,根据 URL 路径),我使用了这个文档作为参考,希望 LPC111x 的指令集与本文档中描述的相似。
总之,我可以做
MOV R0, R1
(低位寄存器到低位寄存器)MOV R8, R1
(低寄存器到高寄存器)MOV R0, R9
(高位寄存器到低位寄存器)MOV R8, R9
(高位寄存器到高位寄存器)
在 LPC111x(或 LPC1114FN28/102,如果您需要特定的 CPU)?