MIPS汇编–指令表示

  • Post author:
  • Post category:其他

最低有效位:二进制位的最右边一位
最高有效位:二进制位的最左边一位

lb 指令将字节看作有符号数,使用符号扩展填充寄存器左侧24位,lbu 把字节看作无符号数,进行零扩展。

对二进制补码取反的快速方法:取反加一

计算机中指令的表示:
指令在计算机内部是以若干或高或低的电信号序列表示,形式上和数的表示相同。实际上指令的各部分都可看作一个独立的数
将这些数拼接在一起就形成了指令。
因为几乎所有指令中都要用到寄存器,so需要将寄存器名字映射称为数字。MIPS中寄存器$s0 ~ $s7映射到寄存器16 ~ 23,
$t0 ~ $t7映射到寄存器8 ~ 15

	机器指令分为若干字段:
		指令:	add $t0, $s1, $s2	对应机器指令的十进制表示形式:	
											|  0 | 17 | 18 | 8 | 0 | 32 |
			第一个字段 0 和最后一个字段 32 组合起来告诉MIPS进行加法计算,第二个字段 17 表示第一个源操作数,第三个字段 18 表示第二个源操
			做数,第四个字段表示目的寄存器号,第五个字段没用到故为0。这样这条指令的二进制形式为:
											| 000000 | 10001 | 10010 | 01000 | 000000 | 100000 |
	指令的布局形式叫做指令格式,从位数上看,MIPS指令占32位,与数据字的位数相等,为遵循简单源于规整的原则,所有MIPS指令都是32位长。
	MIPS字段命名:
				| op | rs | rt | rd | shamt | funct |
		op:指令的基本操作,即操作码,用于表示操作和格式
		rs:第一个源操作数寄存器
		rt:第二个源操作数寄存器
		rd:存放操作结果的目的寄存器
		shamt:位移量
		funct:功能码,指明op中操作的特定变式

当指令需要比上述字段更长的字段时就会出现问题,比如lw指令,若其中常数使用上述字段中5位二进制位的字段时,则该操作数限制在2^5大小内,这样
内存的寻址范围就会受限制。所以这就在所有指令长度相同和统一的指令格式之间形成了矛盾,由此引出又一条硬件设计原则:

优秀的设计需要适宜的折中方案
对于这种情况采取了一种折中方式:指令长度相同但不同类型指令采用不同的指令格式。比如上述格式称为R型(用于
寄存器)。另一种格式称为I型(用于立即数),立即数和数据传送指令用这种格式:
| op | rs | rt | constant or address |
例: lw $t0 ,32( $ s3 )
19放在rs段中,8放在rt中,32放在address中,注意这里rt段意思变了:不是源寄存器而是目的寄存器

定长指令的需求和设置尽可能多的寄存器的需求矛盾。寄存器数量的任意增长都需要在指令格式中的寄存器字段中增加至少一位,综合考虑这些限制和
越小越快的原则,当今大多数指令系统中有16或32个通用寄存器。

当今计算机基于以下两个重要准则构建:
指令用数的形式表示
和数据一样,程序存储在存储器中,并且可以读写
这些原则引出存储程序的概念。