Thumb指令集之:Thumb數(shù)據(jù)處理指令
11.4.22移位指令MOV(1)
(1)編碼格式
數(shù)據(jù)傳送指令MOV(1)的編碼格式如圖11.28所示。
圖11.28MOV(1)指令的編碼格式
(2)指令的語法格式
MOVRd>,#immed_8>
①Rd>
目的寄存器。存放指令的執(zhí)行結果。
②immed_8>
8位立即數(shù)。指示要移入寄存器的數(shù)據(jù)。
(3)指令操作的偽代碼
Rd=immed_8
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=unaffected
VFlag=unaffected
(4)對應的ARM指令
MOVSRd>,#immed_8>
11.4.23移位指令MOV(2)
(1)編碼格式
數(shù)據(jù)傳送指令MOV(2)的編碼格式如圖11.29所示。
圖11.29MOV(2)指令的編碼格式
此種形式的MOV指令用于數(shù)據(jù)在r0~r7低寄存器間傳送,并根據(jù)的指令的執(zhí)行結果更新程序狀態(tài)寄存器的標志位。
注意 | 從指令的編碼形式可以看出,MOV(2)指令被作為ADDRd,Rn,#0指令來編譯。 |
(2)指令的語法格式
MOVRd>,Rn>
①Rd>
目的寄存器。存放指令的執(zhí)行結果。
②Rn>
源寄存器。用于存放被傳送的數(shù)據(jù)。
(3)指令操作的偽代碼
Rd=Rn
NFlag=Rd[31]
ZFlag=ifRd==0then1else0
CFlag=0
VFlag=0
(4)對應的ARM指令
ADDRd>,Rn>,#0
11.4.24移位指令MOV(3)
(1)編碼格式
數(shù)據(jù)傳送指令MOV(3)的編碼格式如圖11.30所示。
圖11.30MOV(3)指令的編碼格式
此種形式的MOV指令用于在r8~r14和PC寄存器的高16位內(nèi)傳送數(shù)據(jù)。與MOV(2)指令不同,該指令不影響程序狀態(tài)寄存器。
(2)指令的語法格式
MOVRd>,Rm>
①Rd>
目的寄存器??梢允莚0~r15中的任意寄存器,用于存放指令的執(zhí)行結果。
②Rm>
源寄存器??梢允莚0~r15中的任意寄存器,用于存放被傳輸?shù)臄?shù)據(jù)。
(3)指令操作的偽代碼
Rd=Rm
(4)指令的使用
可以使用此種形式的MOV指令MOVPC,r14用于子程序的返回(返回的程序是Thumb子程序)。它和BX指令的區(qū)別在于BX指令可以用于ARM和Thumb程序間的相互調(diào)用。
注意 | 如果目的寄存器Rd>和源寄存器Rm>同時為r0~r7低寄存器,則指令的執(zhí)行結果不可預知。 |
(5)對應的ARM指令
MOVRd>,Rm>
評論