當前位置:
首頁 > 最新 > 嵌入式系統開發學習:16 ARM信號量指令

嵌入式系統開發學習:16 ARM信號量指令

目標:

學習掌握ARM的SWP/SWPB寄存器和內存數據交換指令。


ARM 信號量指令概述:

ARM經典微處理器有兩條信號量指令(單條指令完成ARM通用寄存器與內存交換指令)。

一個關於C語言的問題:

int i;

i = 5;

請問在ARM這類精簡指令集的微處理器上執行i=5的代碼是原子的嗎?

根據學習的ARM體系結構和ARM彙編指令可以知道,執行給變數i賦值5的動作不是原子的。它至少需要執行如下指令:

1、 獲得內存中變數i的地址(把變數i的地址存儲存入寄存器)

2、 把數值5載入的ARM的通用寄存器中

3、 使用存儲器指令STM將ARM寄存器中的數據(5)存入i變數中(根據地址)

要完成如上指令至少需要3條ARM指令,所以C語言的i=5被執行時,不是原子的(多條指令執行過程可能被打斷)。

ARM處理器設計了一條可以原子的完成內存和ARM通用寄存器交換數據的指令:

SWP(字交換指令)/SWPB(位元組交換指令)


信號量指令(SWP/SWPB)

語法:

圖:ARM 信號量指令

cond:可選,條件助記符,如:EQ,NE

B:可選,位元組,如果有就表示交換一個位元組數據,ARM寄存器的低8位

Rd:目標寄存器,內存中的數將被載入到本寄存器

Rm:源寄存器,被寫到內存中的數

Rn:地址寄存器,內存數據所在的地址

指令執行動作說明:

該指令一條指令完成兩個動作:

1、 Rm寄存器內容寫入Rn寄存器指定的內存地址單元中

2、 Rn寄存器指定的內存單元的數據載入到寄存器Rd中

註:

1、 完成如上操作需要藉助中間存儲單元(ARM處理器自動完成)。

2、 如果Rd和Rm相同則實現寄存器內容和內存內容互換。

3、 R15不能出現在Rd,Rm,Rn中,出現結果不可預知。

4、 Rd,Rn不能相同,否則結果不可預知。

5、 Rm,Rn不能相同,否則結果不可預知。

SWP指令執行動作的偽代碼:

SWPB指令執行操作的偽代碼:

指令示例:

; load R12 from address R9 and store R10 to address R9

SWP R12, R10, [R9]

; load byte to R3 from address R8 and store byte from R4 to address R8

SWPB R3, R4, [R8]

; Exchange value in R1 and address in R2

SWP R1, R1, [R2]

指令示例2

圖:SWP指令示例

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 邦氪 的精彩文章:

用doxygen為C/C十十程序自動生成文檔《1、簡介及安裝》

TAG:邦氪 |