數據處理指令

數據處理指令

指令是一系列二進制代碼,是對計算機進行程式控制的最小單位,是計算機所能識別並執行某種操作的命令 。在計算機科學中,指令按其功能,主要分為兩類:一為數據處理指令,一為程式控制指令。數據處理指令是指對暫存器的內容進行操作,而不能對記憶體中的數據進行操作的指令。

簡介

計算機指令,就是指揮機器工作的指示和命令,程式就是一系列按一定順序排列的指令,執行程式的過程就是計算機的工作過程。每一台計算機均有自己的特定的指令系統,其指令內容和格式有所不同。數據處理指令是指對暫存器中的數據進行操作指令。數據處理指令可分為數據傳送指令、算術邏輯運算指令和比較指令等。數據傳送指令用於在暫存器和存儲器之間進行數據的雙向傳輸。算術邏輯運算指令完成常用的算術與邏輯的運算,該類指令不但將運算結果保存在目的暫存器中,同時更新CPSR中的相應條件標誌位。比較指令不保存運算結果,只更新CPSR中相應的條件標誌位。

常見數據處理指令

MOV:數據傳送指令。

MVN:數據取反傳送指令。

CMP:比較指令。

CMN:反值比較指令。

TST:位測試指令。

TEQ:相等測試指令。

ADD:加法指令。

ADC:帶進位加法指令。

SUB:減法指令。

SBC:帶借位減法指令。

RSB:逆向減法指令。

RSC:帶借位的逆向減法指令。

AND:邏輯與指令。

ORR:邏輯或指令。

EOR:邏輯異或指令。

BIC:位清除指令。

數據傳送指令

最常用的就是MOV指令了,語法格式如下:

MOV{<cond>}{S} <Rd>, <shifter_operand>

MOV指令將<shifter_operand>表示的數據傳送到目標暫存器Rd中,若指令中帶有S標誌,則根據操作結果更新CPSR中的N、Z、C位。

MVN傳送指令

MVN{<cond>}{S} <Rd>, <shifter_operand>

與MOV指令類似,MVN表示將數據的反碼傳送到目標暫存器,並根據情況更新CPSR中的N、Z、C位。

MRS指令

MRS{<cond>} <Rd>, CPSR

從指令語法中,我們能夠猜測出該指令是對CPSR暫存器進行操作的指令,它的主要功能是將狀態暫存器中的內容傳送到能用暫存器中。

MSR指令

MSR<cond> CPSR_<fields>, <shifter_operand>

MSR<cond> SPSR_<fields>, <shifter_operand>

<fields>指的是狀態暫存器中需要操作的位。狀態暫存器的32位可以分為4個8位的域:0-7位為控制項位域,用c表示,8-15位為擴展位域,用x表示,16-23位為狀態位域,用s表示,24-31位為條件標誌位域,用f表示。
MSR指令的功能是將數據傳送到狀態暫存器中。MSR與MRS指令通過讀出-修改-寫回操作,用於恢復或者改變狀態暫存器的內容。

MRS R0, CPSR ;讀取CPSR

BIC R0, R0, #0x1F ;修改,去除當前處理器模式

ORR R0, R0, #0x13 ;修改,設定特權模式

MSR CPSR_c, R0 ;寫回,僅僅修改CPSR中的控制位域

BIC位清除指令

BIC{<cond>}{S} <Rd>, <Rn>, <shifter_operand>

BIC指令將<shifter_operand>表示的數值與暫存器<Rn>的值的反碼按位做邏輯與操作,並把結果保存到目標暫存器<Rd>中。

比較指令

CMP比較指令

CMP{<cond>} <Rn>, <shifter_operand>

CMP指令從暫存器Rn中減去<shifter_operand>表示的數值,根據操作的結果更新CPSR中的相應的條件標誌位,後面的指令就可以根據CPSR中相應的位來判斷是否執行了。

CMN基於相反數的比較指令

CMN{<cond>} <Rn>, <shifter_operand>

CMN指令將暫存器Rn中的值加上<shifter_operand>表示的數值,根據操作的結果更新CPSR中相應的條件標誌位。與CMP指令相比,就可以理解CMN為什麼叫基於相反數的比較指令了。

TST位測試指令

TST{<cond>} <Rn>, <shifter_operand>

TST指令將<shifter_operand>表示的數值與Rn中的值按位做邏輯與運算,根據操作的結果更新CPSR中的條件標識位。TST指令通常用於測試暫存器中某些位是1還是0。

TEQ相等測試指令

TEQ{<cond>} <Rn>, <shifter_operand>

TEQ指令將<shifter_operand>表示的數值與暫存器<Rn>的值做邏輯異或操作,根據操作的結果更新CPSR中的條件標誌位。TEQ通常用於比較兩個數是否相等,與CMP/CMN操作相比,TEQ操作通常不影響CPSR中的V、C位。

算術邏輯指令

算術指令

加法指令ADD

{<cond>}{S} <Rd>, <Rn>, <shifter_operand> ;加法指令

ADC{<cond>}{S} <Rd>, <Rn>, <shifter_operand> ;帶位加法指令

ADD指令將Rn中的值與<shifter_operand>表示的值相加,並將結果保存到目標暫存器Rd中。
ADC指令將Rn中的值與<shifter_operand>表示的值相加,再加上CPSR中的C條件標誌位的值,並將結果保存到目標暫存器<Rd>中。
ADD指令與ADC指令聯合使用,可以實現兩個64位的運算元據相加,代碼如下:

ADDS R4, R0, R2 ;兩個64位數R1R0與R3R2,先將兩個數的低位相加,結果保存在R4中,如有進位,保存在CPSR的C位中

ADC R5, R1, R3 ;再將兩個數的高位相加,並加上低位相加的進位,結果保存在R5中,R5R4則表示這兩個64位數相加的結果

減法指令SUB

{<cond>}{S} <Rd>, <Rn>, <shifter_operand> ; 減法指令

SBC{<cond>}{S} <Rd>, <Rn>, <shifter_operand> ;帶位減法指令同加法指令類似,減法指令也有帶位與不帶位兩條指令,用法也非常類似,同樣也可用作64位數的減法:

SUBS R4, R0, R2

SBC R5, R1, R3

逆向減法指令

RSB{<cond>}{S} <Rd>, <Rn>, <shifter_operand> ;逆向減法指令

RSC{<cond>}{S} <Rd>, <Rn>, <shifter_operand> ;帶位逆向減法指令

逆向減法指令也是實現了兩個運算元據的減法,與減法指令不同的是,逆向減法指令是從<shifter_operand>表示的數中減去暫存器Rn的值,Rd中保存操作的結果。

乘法指令

MUL{<cond>}{S} <Rd>, <Rm>, <Rs>

MLA{<cond>}{S} <Rd>, <Rm>, <Rs>, <Rn>

MUL實現兩個32位數Rm與Rs的乘積,並將結果保存到Rd中。
MLA實現兩個32位數Rm與Rs的乘積,再將乘積加上Rn後保存到Rd中。

邏輯操作指令

AND與操作指令

AND{<cond>}{S} <Rd>, <Rn>, <shifter_operand>

AND指令將<shifter_operand>表示的值與Rn的值按位做邏輯與操作,結果保存到Rd中。

ORR或操作指令

ORR{<cond>}{S} <Rd>, <Rn>, <shifter_operand>

ORR指令將<shifter_operand>表示的值與Rn的值按位做邏輯或操作,結果保存到Rd中。

EOR異或操作指令

EOR{<cond>}{S} <Rd>, <Rn>, <shifter_operand>

EOR指令將<shifter_operand>表示的值與Rn的值按位做邏輯異或操作,結果保存到Rd中。

相關詞條

熱門詞條

聯絡我們