2.1 引言
计算机语言中的基本词汇称为指令,一台计算机的全部指令称为该计算机的指令集。
设备简单性,MIPS符合此原则。
2.2 计算机硬件的操作
将C语言程序转换为MIPS汇编指令是由编译器完成的。
与加法类似的指令一般都有3个操作数:两个用于运算,一个用于保存结果。
设计原则1:简单源于规整。
2.3计算机硬件的操作数
MIPS算数运算指令的操作数必须来自寄存器。
设计原则2:越小越快。
使用$s0 $s1表示C,Java程序中变量对应的寄存器,用$t0 $t1表示将程序编译为MIPS指令时所需的临时寄存器。
2.3.1存储器操作数
复杂数据结构中的数据元素可能远多于计算机中寄存器的个数。处理器只能将少量数据保存在寄存器中,但是存储器可以存放数十亿的数据元素。
存放基址的寄存器称为基址寄存器。
大端(高数据位对应低存储位),小端(低数据位对应低存储位)
lw和sw是MIPS体系结构中在存储器和寄存器之间复制字的指令。其他计算机有各自相应的取数和存数指令来传送数据。Intel x86 体系结构中有类似的指令。
2.3.2常数或立即数操作数
立即数就在指令中,最后应该是放到临时寄存器里面再执行对应运算,这个还需要下面学习确定。
addi $s3,$s3,4
2.4有符号位和无符号位
符号和幅值表示法(即原码表示法)
现在所有计算机都采用二进制补码来表示有符号数补码用的另外一套思路,比较绕,但是也是非常对的。
符号扩展,零扩展
若计算机使用六位二进制数表示数字“00 1010”(十进制的正10),且此数字需要将字长符号扩充至十六位,则扩充后的值为“0000 0000 0000 1010”。此时,数值与符号均保留了下来。若计算机使用十位数及二补数表示数字“11 1111 0001”(十进制的负15),且此值需要扩充至十六位,则扩充后的值为“1111 1111 1111 0001”。 此时,负号及原数字数值通过将左侧填充为1的方式保留了下来。lb,lbu,lh,lhu (byte,half)