新聞中心

        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>



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 定陶县| 门源| 西昌市| 栾城县| 琼结县| 金湖县| 吴堡县| 沧州市| 玉环县| 苍山县| 永顺县| 丹巴县| 富民县| 巴青县| 西宁市| 攀枝花市| 大理市| 从化市| 孝昌县| 兴国县| 宝清县| 永年县| 德令哈市| 瑞丽市| 福清市| 城步| 即墨市| 图片| 兴义市| 启东市| 班玛县| 南城县| 永德县| 泰顺县| 崇州市| 富川| 肥乡县| 固安县| 普陀区| 句容市| 鱼台县|