一、寄存器与内存
1.1 字节与字
关于对字(word)的理解,我又有了新的认识,word是一种操作单位,而且是最常见的操作单位(不是最小的),内存的地址是用一个字(32位二进制数)来表示的,一条指令的长度是一个字,寄存器的大小也是一个字,立即数的大小也是一个字,甚至对于那些不足一个字长度的数据,我们都需要给它补齐,然后再对它进行操作。所以字最大的特点就是它的通用性。
那么什么是字节(byte)呢?字节是指令集的最小单位。这个观点是花了很久才意识到的,因为我知道数据是按二级制表示的,那么如果把位(bit)作为最小单位,岂不是理所当然。但其实就是不是的,这可能是因为我们需要更简洁更优雅的指令抽象,所以就舍弃了对单独一个位的操作,就好像数字电路舍弃了异步和连续一样。注意,字节不但是操作的最小单位(可能不准确,我还没想到太明显的操作字节的指令),而且是指令集的最小单位,比如我们说0x00000000和0x00000001这两个地址差1,那么这个1就是“1个字节”,也就是这两个地址之间差了8个bit。而不是1个bit。再比如说,我们都说int是4字节,char是1字节,我们从来不说int是32位,char是8位,可见更高层次抽象的高级语言,就更不把位当回事请了。
然后我们还需要一些直观的认识,一个字节是8bit,也就是说,他的能表示256个不同的状态,如果写成一个十六进制数,那么他可以表示任何一个两位的十六进制数,也就是长成这个样子 XX。在MIPS中,一个word是由四个字节组成的,也就是说,我们去写一个十六进制数,它应该长成这个样子 0x XX_XX_XX_XX 。一个word的大小是跟一个int一样大的,同时,它跟MIPS中的立即数是一样大的,也就是说,一个word刚好能存一个数字(开数组的时候会用到)。但是可以存4个字符,这是因为字符只占一个字节。