新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Thumb指令集之:Thumb數(shù)據(jù)處理指令

Thumb指令集之:Thumb數(shù)據(jù)處理指令

作者: 時間:2013-09-30 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://2s4d.com/article/257041.htm

11.4.19邏輯左移指令LSL(2)

(1)編碼格式

邏輯左移指令LSL(2)的編碼格式如圖11.25所示。

圖11.25LSL(2)指令的編碼格式

邏輯左移指令LSL(2)可以實現(xiàn)以2為底的冪的乘法。進行移位后空出的位添0并根據(jù)指令的操作結(jié)果更新程序狀態(tài)寄存器的標志位。

(2)指令的語法格式

LSLRd>,Rs>

①Rd>

操作數(shù)寄存器,包含被移位的值并保存指令的執(zhí)行結(jié)果。

②Rs>

包含邏輯左移位數(shù)的寄存器。

(3)指令操作的偽代碼

ifRs[7:0]==0

CFlag=unaffected

Rd=unaffected

ElseifRs[7:0]32then

CFlag=Rd[32–Rs[7:0]]

Rd=Rdlogical_shift_leftRs[7:0]

ElseifRs[7:0]==32then

CFlag=Rd[0]

Rd=0

ElseifRs[7:0]==32then

CFlag=Rd[0]

Rd=0

Else/*Rs[7:0]>32*/

CFlag=0

Rd=0

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)對應(yīng)的指令

MOVSRd>,Rd>,LSLRs>

11.4.20邏輯右移指令LSR(1)

(1)編碼格式

邏輯左移指令LSR(1)的編碼格式如圖11.26所示。

圖11.26LSR(1)指令的編碼格式

邏輯右移指令LSR(1)可以實現(xiàn)以2為底的冪做除數(shù)的除法。進行移位后空出的位添0,并根據(jù)指令的執(zhí)行結(jié)果更新程序狀態(tài)寄存器的標志位。

(2)指令的語法格式

LSRRd>,Rm>,#immed_5>

①Rd>

目的寄存器。存儲指令的操作結(jié)果。

②Rm>

操作數(shù)寄存器。該寄存器保存的數(shù)據(jù)將進行右移操作。

③immed_5>

邏輯右移位數(shù),范圍為0~31。

(3)指令操作的偽代碼

ifimmed_5==0

CFlag=Rd[31]

Rd=0

Else/*immed_5>0*/

CFlag=Rd[immed_5-1]

Rd=RmLogial_shift_rightimmed_5

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)對應(yīng)的指令

MOVSRd>,Rm>,LSR#immed_5>

11.4.21邏輯右移指令LSR(2)

(1)編碼格式

邏輯左移指令LSR(2)的編碼格式如圖11.27所示。

圖11.27LSR(2)指令的編碼格式

邏輯右移指令LSR(2)可以實現(xiàn)以2為底的冪做除數(shù)的無符號除法。進行移位后空出的位添0,并根據(jù)指令的操作結(jié)果更新程序狀態(tài)寄存器的標志位。

(2)指令的語法格式

LSRRd>,Rs>

①Rd>

操作數(shù)寄存器,包含被移位的值并保存指令的執(zhí)行結(jié)果。

②Rs>

包含邏輯右移位數(shù)的寄存器。

(3)指令操作的偽代碼

ifRs[7:0]==0

CFlag=unaffected

Rd=unaffected

ElseifRs[7:0]32then

CFlag=Rd[Rs[7:0]-1]

Rd=Rdlogical_shift_RightRs[7:0]

ElseifRs[7:0]==32then

CFlag=Rd[31]

Rd=0

ElseifRs[7:0]==32then

CFlag=Rd[0]

Rd=0

Else/*Rs[7:0]>32*/

CFlag=0

Rd=0

NFlag=Rd[31]

ZFlag=ifRd==0then1else0

VFlag=unaffected

(4)對應(yīng)的指令

MOVSRd>,Rd>,LSRRs>



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉