新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Thumb指令集之:Thumb數據處理指令

        Thumb指令集之:Thumb數據處理指令

        作者: 時間:2013-09-30 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257041.htm

        11.4.19邏輯左移指令LSL(2)

        (1)編碼格式

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

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

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

        (2)指令的語法格式

        LSLRd>,Rs>

        ①Rd>

        操作數寄存器,包含被移位的值并保存指令的執行結果。

        ②Rs>

        包含邏輯左移位數的寄存器。

        (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)對應的指令

        MOVSRd>,Rd>,LSLRs>

        11.4.20邏輯右移指令LSR(1)

        (1)編碼格式

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

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

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

        (2)指令的語法格式

        LSRRd>,Rm>,#immed_5>

        ①Rd>

        目的寄存器。存儲指令的操作結果。

        ②Rm>

        操作數寄存器。該寄存器保存的數據將進行右移操作。

        ③immed_5>

        邏輯右移位數,范圍為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)對應的指令

        MOVSRd>,Rm>,LSR#immed_5>

        11.4.21邏輯右移指令LSR(2)

        (1)編碼格式

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

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

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

        (2)指令的語法格式

        LSRRd>,Rs>

        ①Rd>

        操作數寄存器,包含被移位的值并保存指令的執行結果。

        ②Rs>

        包含邏輯右移位數的寄存器。

        (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)對應的指令

        MOVSRd>,Rd>,LSRRs>



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 开原市| 东乡族自治县| 沂源县| 江山市| 柏乡县| 兴隆县| 唐山市| 平南县| 和林格尔县| 巢湖市| 南和县| 常德市| 炉霍县| 伽师县| 松原市| 涡阳县| 翼城县| 广德县| 潮州市| 栖霞市| 定南县| 厦门市| 诸暨市| 苏尼特右旗| 宽城| 河间市| 湖南省| 含山县| 临潭县| 攀枝花市| 汕尾市| 根河市| 阜阳市| 密云县| 上饶县| 西安市| 巨鹿县| 中西区| 资溪县| 灵宝市| 乐昌市|