movs 資料傳送指令

2021-10-17 01:51:50 字數 1734 閱讀 1445

1.指令編碼格式

mov指令是最簡單的arm指令,執行的結果就是把乙個數n送到目標暫存器rd,其中n可以是暫存器,也可以是立即數。

mov指令多用於設定初始值或者在暫存器間傳送資料。

指令的編碼格式如圖5.1所示。

圖5.1 mov指令編碼格式

mov指令將移位碼(shifter_operand)表示的資料傳送到目的暫存器rd,並根據操作的結果更新cpsr中相應的條件標誌位。

2.指令的語法格式

mov{}   ,

為指令編碼中的條件域。它指示mov指令在什麼條件下執行。當忽略時,指令為無條件執行(cond=al(alway))。

② s(bit[20])

如果s=1,mov指令更新cpsr中條件標誌位的值;如果s=0,mov指令不更新cpsr中條件標誌位的值。當更新狀態暫存器cpsr中的條件標誌位時,有兩種情況。

·  如果指令中的目標暫存器不是為r15,指令根據傳送的數值設定cpsr中的n位和z位(如果資料在傳送前需要移位,則根據移位後的數值設定),並根據移位器的進製值設定cpsr的c位。標誌位v和其他位不受影響。

·  如果指令中的目標暫存器為r15,則當預處理器模式對應的spsr的值複製到cpsr暫存器中,對於使用者模式和系統模式,由於沒有相應的spsr,指令執行的結果不可預知。

確定目標暫存器。

確定運算元,為目標暫存器傳送資料。

3.指令操作的偽**

指令操作的偽**如下面程式段所示。

if  conditionpassed  then

rd=shifter_operand

if  s==1 and rd==r15  then

cpsr=spsr

else  if  s==1  then

n flag = rd[31]

z flag = if  rd==0  then 1  else 0

c flag = shifter_carry_out

v flag = unaggected

4.指令舉例

【例5.1】mov指令

mov指令把乙個數n送到目標暫存器rd,其中n可以是立即數,也可以是暫存器。

mov     r0, r0              ; r0 = r0... nop 指令

mov     r0, r0, lsl#3        ; r0 = r0 * 8

如果r15是目的暫存器,將修改程式計數器或標誌。這用於返回到呼叫**,方法是把連線暫存器的內容傳送到r15。

mov     pc, r14             ; 退出到呼叫者

movs    pc, r14             ; 退出到呼叫者並恢復標誌位

5.指令的使用

mov指令主要完成以下功能。

·  將資料從乙個暫存器傳送到另乙個暫存器。

·  將乙個常數值傳送到暫存器中。

·  實現無算術和邏輯運算的單純移位操作,運算元乘2n可以用左移n位來實現。

·  當pc暫存器(r15)用作目的暫存器時,可以實現程式跳轉。如「mov  pc,lr」,所以這種跳轉可以實現子程式呼叫以及從子程式返回,代替指令「b,bl」。

注意在體系結構v4和v5以上的版本,必須使用bx指令代替mov  pc,lr指令,因為bx指令可以自動實現arm和thumb的切換。

當pc暫存器作為目標暫存器且指令中s位被設定時,指令在執行跳轉操作的同時,將當預處理器模式的spsr暫存器內容複製到cpsr中。這種指令「movs pc lr」可以實現從某些異常中斷中返回。

資料傳送指令

資料傳送指令共有29條,資料傳送指令一般的操作是把源運算元傳送到目的運算元,指令執行完成後,源運算元不變,目的運算元等於源運算元。如果要求在進行資料傳送時,目的運算元不丟失,則不能用直接傳送指令,而採用交換型的資料傳送指令,資料傳送指令不影響標誌c,ac和ov,但可能會對奇偶標誌p有影響。以累加器a...

資料傳送指令

1 mov mov ds,2000h 語法錯誤,不能用立即數給段暫存器賦值。應該為 mov ax,2000 mov ds,ax mov word ptr di 2000h ptr 是屬性運算子,功能為修改運算元的型別。word ptr 的作用是將運算元的型別 設定為字型別。mov di 04ah 語...

MOVS指令通用暫存器值ESI EDI

當我們把乙個資料從乙個地方複製到另乙個地方。串指令都會用到esi edi 這兩個指令是movs指令指定的。只要 用movs就要用esi edi。esi和edi中儲存的是乙個位址 例 執行如下指令 意思是把esi中那個位址中的值複製到edi中那個位址對應的值 執行一次指令前 執行一次指令後 effa4...