- 向下兼容
- 变长指令
1-15字节,多数为2-3字节长度
- 多种寻址方式(可访问不对齐内存地址)
- 指令集的通用寄存器的个数有限
X86-32系统下拥有8个通用寄存器(X86-64扩展到16个)
- 至多只有一个操作数在内存中,另一个操作数为立即数或者寄存器
- 以寄存器为中心(32个),只有Load/Store指令访问内存,所有的计算类型指令均从寄存器堆中读取数据并把结果写入寄存器堆中。MIPS32还定义了32个浮点寄存器
- MIPS指令集的指令格式非常规整,所有指令长度一定,而且指令操作码在固定的位置上。
- MIPS指令的寻址方式非常简单,每条指令的操作也较简单
- MIPS32^TM的指令格式只有三种
R (register)类型的指令从寄存器堆读取两个源操作数将结果写回寄存器堆。
I (immediate)类型的指令使用16位的立即数作为源操作数。
J (jump)类型的指令使用26位立即数作为跳转的目标地址(target address)。
“有些不同”的RISC指令集
- ARM指令完成简单的操作。编译器或程序员通过几条简单指令的组合来实现一个复杂的操作
- ARM指令集大多数采用相同的字节长度,并且在字边界上对齐,字段位置固定,特别是操作码的位置。
- 使用Load/Store 存储模式,只有Load/Store指令访问内存,所有其他指令都只能对寄存器里的操作数进行操作。
- 大多指令都具有“条件执行”模式
- 具有16位压缩指令集(Thumb)
一般指机器进行一次整数运算所能处理的二进制数据的位数
通常也包括数据地址长度。
- 无符号数--->原码表示
- 带符号数--->补码表示(它的负数=原码数按位取反加一)
- 无符号数
- 带符号数(补码)
X | B2U(X) | B2T(X) |
---|---|---|
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | -8 |
1001 | 9 | -7 |
1010 | 10 | -6 |
1011 | 11 | -5 |
1100 | 12 | -4 |
1101 | 13 | -3 |
1110 | 14 | -2 |
1111 | 15 | -1 |
无符号数与带符号数之间的转换:二进制串本身是不变化的,只是解释的不一样
- 如果有“U”作为后缀则是无符号数,如0U,112312312U
0 | 0U | == | |
-1 | 0 | < | |
-1 | 0U | > | |
2147483647 | -2147483647-1 | > | |
2147483647U | -2147483647-1 | < | |
-1 | -2 | > | |
( |
-2 | > | |
2147483647 | 2147483648U | < | |
2147483647 | ( |
> |