- RISC-V體系結構編程與實踐(第2版)
- 笨叔
- 893字
- 2024-09-23 17:56:03
3.5 移位操作
常見的移位操作如下。
● sll:邏輯左移(shift left logical),最高位丟棄,最低位補0,如圖3.10(a)所示。
● srl:邏輯右移(shift right logical),最高位補0,最低位丟棄,如圖3.10(b)所示。
● sra:算術右移(shift right arithmetic),最低位丟棄,最高位按照符號進行擴展,如圖3.10(c)所示。

圖3.10 移位操作
常見的移位指令如表3.4所示。
表3.4 常見的移位指令

關于移位操作指令,有以下3點需要注意。
● RISC-V指令集里沒有單獨設置算術左移指令,因為sll指令會把最高位丟棄。
● 邏輯右移和算術右移的區別在于是否考慮符號。
例如,源操作數為二進制數10 1010 1010。
邏輯右移一位,變成[0]1 0101 0101( 最高位永遠補0)。
算術右移一位,變成[1]1 0101 0101(需要按照源操作數進行符號擴展)。
● 在RV64指令集中,SLL、SRL以及SRA指令只使用rs2寄存器中低6位的數據做移位操作。
【例3-9】 如下代碼使用了SRAI和SRLI指令。
li t0, 0x8000008a00000000
srai a1, t0, 1
srli t1, t0, 1
在上述代碼中,SRAI是立即數算術右移指令,把0x8000 008A 0000 0000右移一位并且根據源二進制數的最高位需要進行符號擴展,結果為0xC000 0045 0000 0000。SRLI是立即數邏輯右移指令,把0x8000 008A 0000 0000右移一位并且在最高位補0,結果為0x4000 0045 0000 0000。
【例3-10】 如下代碼使用了SRAIW和SRLIW指令。
1 li t0, 0x128000008a
2 sraiw a2, t0, 1
3 srliw a3, t0, 1
4
5 li t0, 0x124000008a
6 sraiw a4, t0, 1
在第2行中,使用立即數算術右移指令,截取t0寄存器低32位的值(0x8000 008A)作為新的源操作數,然后右移一位并根據新的源二進制數的最高位需要進行符號擴展,結果為0xFFFF FFFF C000 0045。
在第3行中,使用立即數邏輯右移指令,截取t0寄存器低32位的值(0x8000 008A)作為新的源操作數,然后右移一位并進行符號擴展,結果為0x4000 0045。
在第6行中,使用立即數算術右移指令,截取t0寄存器低32位的值(0x4000 008A)作為新的源操作數,然后右移一位并根據新的源二進制數的最高位需要進行符號擴展,結果為0x2000 0045。
【例3-11】 下面的示例代碼使用了SLLIW指令。
1 li t0, 0x128000008a
2 slliw a3, t0, 1
3
4 li t0, 0x122000008a
5 slliw a4, t0, 1
6
7 li t0, 0x124000008a
8 slliw a5, t0, 1
在第2行中,使用立即數邏輯左移指令,截取t0寄存器低32位的值(0x8000 008A),然后左移一位,結果為0x114。
在第5行中,截取t0寄存器低32位的值(0x2000 008A),左移一位,結果為0x4000 0114。
在第8行中,截取t0寄存器的低32位的值(0x4000 008A),左移一位后為0x800 00114,由于最高位為1,需要進行符號擴展,結果為0xFFFF FFFF 8000 0114。
- Node.js Design Patterns
- C#程序設計實訓指導書
- Building a Home Security System with Raspberry Pi
- Expert Android Programming
- Hands-On GPU:Accelerated Computer Vision with OpenCV and CUDA
- Drupal 8 Module Development
- Mastering JavaScript High Performance
- 焊接機器人系統操作、編程與維護
- Python之光:Python編程入門與實戰
- C/C++程序員面試指南
- Hands-On Full Stack Development with Spring Boot 2.0 and React
- Spring技術內幕:深入解析Spring架構與設計原理(第2版)
- Serverless Web Applications with React and Firebase
- Unity 2017 Game AI Programming(Third Edition)
- Visual C++從入門到精通(第2版)