加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 5.5  單數(shù)據(jù)交換指令
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

數(shù)據(jù)傳送指令之:單數(shù)據(jù)交換指令

2013/09/13
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

?

5.5? 單數(shù)據(jù)交換指令

交換指令是load/store指令的一種特例,它把一個寄存器單元的內容與寄存器內容交換。交換指令是一個原子操作(atomic operation),也就是說,在連續(xù)的總線操作中讀/寫一個存儲單元,在操作期間阻止其他任何指令對該存儲單元的讀/寫。

交換指令如表5.4所示。

表5.4??? 交換指令SWP

指??? 令

作??? 用

操??? 作

SWP

字交換

Tmp=men32[Rn]

Mem32[Rn]=Rm

Rd=tmp

續(xù)表

指??? 令

作??? 用

操??? 作

SWPB

字節(jié)交換

Tmp=men8[Rn]

Mem8[Rn]=Rm

Rd=tmp

注意

交換指令在執(zhí)行期間不能被其他任何指令或其他任何總線訪問打斷,在此期間系統(tǒng)占用總線(holds the bus),直至交換完成。

5.5.1? 字交換指令SWP

(1)指令編碼格式

SWP指令用于將內存中的一個字單元和一個指定寄存器的值相交換。操作過程如下,假設內存單元地址存放在寄存器<Rn>中,指令將<Rn>中的數(shù)據(jù)讀取到目的寄存器Rd中,同時將另一個寄存器<Rm>的內容寫入到該內存單元中。當<Rd>和<Rm>為同一個寄存器時,指令交換該寄存器和內存單元的內容。

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

圖5.20? SWP指令編碼格式

(2)指令的語法格式

SWP{<cond>}? <Rd>,<Rm>,[<Rn>]

① <cond>

為指令編碼中的條件域。它指示SWP指令在什么條件下執(zhí)行。當<cond>忽略時,指令為無條件執(zhí)行(cond=AL(Alway))。

② <Rd>

目標寄存器。

③ <Rm>

寄存器包含將要存儲到內存中的數(shù)據(jù)。

④ <Rn>

寄存器中包含將要訪問的內存地址。

(3)指令操作的偽代碼

指令操作偽代碼如下面程序段所示。

If? ConditionPassed{cond}? then

???? If? Rn[1:0]==0b00? then

??????????? Temp=memory[Rn,4]

???? Else? if? Rn[1:0]==0b01? then

??????????? Temp=memory[Rn,4]? Rotate_right 8

???? Else? if? Rn[1:0]==0b10? then

??????????? Temp=memory[Rn,4]? Rotate_right 16

???? Else? /*? Rn[1:0]==0b11? */

??????????? Temp=memory[Rn,4]? Rotate_right 24

???? Memory[Rn,4]=Rm

???? Rd=temp

?

5.5.2? 字節(jié)交換指令SWPB

(1)指令編碼格式

SWPB指令用于將內存中的一個字節(jié)單元和一個指定寄存器的低8位值相交換,操作過程如下。假設內存單元地址存放在寄存器<Rn>中,指令將<Rn>中的數(shù)據(jù)讀取到目的寄存器Rd中,寄存器Rd的高24位設為0,同時將另一個寄存器<Rm>的低8位內容寫入到該內存字節(jié)單元中。當<Rd>和<Rm>為同一個寄存器時,指令交換該寄存器低8位內容和內存字節(jié)單元的內容。

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

圖5.21? SWPB指令編碼格式

(2)指令的語法格式

SWP{<cond>}B? <Rd>,<Rm>,[<Rn>]

① <cond>

為指令編碼中的條件域。它指示SWPB指令在什么條件下執(zhí)行。當<cond>忽略時,指令為無條件執(zhí)行(cond=AL(Alway))。

② <Rd>

目標寄存器。

③ <Rm>

寄存器包含將要存儲到內存中的數(shù)據(jù)。

④ <Rn>

寄存器中包含將要訪問的內存地址。

(3)指令操作的偽代碼

指令操作偽代碼如下面程序段所示。

If? ConditionPassed{cond}? then

???? Temp=Memory[Rn,1]

???? Memory[Rn,1]=Rm[7:0]

???? Rd=temp

5.5.3? 交換指令SWP應用

寄存器和存儲器交換指令SWP指令用于將一個內存單元(該單元地址放在寄存器Rn中)的內容讀取到一個寄存器Rd中,同時將另一個寄存器Rm的內容寫到該內存單元中,使用SWP可實現(xiàn)信號量操作。

格式如下。

SWP{cond}B? Rd,Rm,[Rn]

其中,B為可選后綴,若有B,則交換字節(jié),否則交換32位字。Rd為目的寄存器,存儲從存儲器中加載的數(shù)據(jù),同時,Rm中的數(shù)據(jù)將會被存儲到存儲器中。若Rm與Rn相同,則為寄存器與存儲器內容進行交換。Rn為要進行數(shù)據(jù)交換的存儲器地址,Rn不能與Rd和Rm相同。

【例5.6】SWP指令舉例。

SWP? r1,r1,[r0]???????? ;將r1的內容與r0指向的存儲單元內容進行交換

SWPB? r1,r2,[r0]??????? ;將r0指向的存儲單元內容讀取一字節(jié)數(shù)據(jù)到r1中(高24位清零),

????????????????????? ?并將r2的內容寫入到該內存單元中(最低字節(jié)有效)

使用SWP指令可以方便地進行信號量操作。

12C_SEM????? EQU???? 0x40003000

???????????? ……

12C_SEM_WAIT

????????? MOV????? r0,#0

????????? LDR????? r0,=12C_SEM

????????? SWP????? r1,r1,[r0]??????? ;取出信號量,并將其設為0

????????? CMP????? r1,#0???????????? ;判斷是否有信號

????????? BEQ????? 12C_SEM_WAIT?????? ;若沒有信號則等待

Arm

Arm

ARM公司是一家知識產權(IP)供應商,主要為國際上其他的電子公司提供高性能RISC處理器、外設和系統(tǒng)芯片技術授權。目前,ARM公司的處理器內核已經成為便攜通訊、手持計算設備、多媒體數(shù)字消費品等方案的RISC標準。公司1990年11月由Acorn、Apple和VLSI合并而成。

ARM公司是一家知識產權(IP)供應商,主要為國際上其他的電子公司提供高性能RISC處理器、外設和系統(tǒng)芯片技術授權。目前,ARM公司的處理器內核已經成為便攜通訊、手持計算設備、多媒體數(shù)字消費品等方案的RISC標準。公司1990年11月由Acorn、Apple和VLSI合并而成。收起

查看更多

相關推薦

電子產業(yè)圖譜

華清遠見(www.farsight.com.cn)是國內領先嵌入師培訓機構,2004年注冊于中國北京海淀高科技園區(qū),除北京總部外,上海、深圳、成都、南京、武漢、西安、廣州均有直營分公司。華清遠見除提供嵌入式相關的長期就業(yè)培訓、短期高端培訓、師資培訓及企業(yè)員工內訓等業(yè)務外,其下屬研發(fā)中心還負責嵌入式、Android及物聯(lián)網方向的教學實驗平臺的研發(fā)及培訓教材的出版,截止目前為止已公開出版70余本嵌入式/移動開發(fā)/物聯(lián)網相關圖書。企業(yè)理念:專業(yè)始于專注 卓識源于遠見。企業(yè)價值觀:做良心教育、做專業(yè)教育,更要做受人尊敬的職業(yè)教育。