这两个都是小型设备的处理器架构。MIPS架构的处理器多用在网关、猫、机顶盒什么的。ARM处理器用在便携设备,智能手机。这两个东西的市场几乎很少重叠,因此也谈不上对比。普通用户关注MIPS主要还是因为我国所谓的”龙芯“。龙芯一开始抄袭MIPS,后来购买到了授权。倒也并非龙芯不想发展X86架构的桌面CPU市场或者ARM架构的移动设备市场,是因为这两家的授权太过于苛刻。X86的授权Intel已然不可能再授权。ARM是一家芯片设计公司,只能给出使用授权,不会同意让龙芯自行设计。只有MIPS才可行,MIPS的授权说白了就是随便抄随便改。很多龙芯的支持者提出了MIPS在理论上有诸多的领先,但不要忘了ARM是一家商业公司,市场占有率高,竞争意识也非常强。几乎所有的智能手机都是ARM架构,就是最有力的证明。
寄存器的大小为32位,由于32位为一组的情况很常见,所以称之为 “字(word)” ,另外由于MIPS使用字节编址,所以连续的地址字的地址也就相差4。另外,处理器只能将少量的数据保存在寄存器上,剩下的数以十亿记的数据都是放在存储器上的。比如数据结构和数组等。所以MIPS体系中要对存储器和寄存器之间的数据进行传输,就有了 数据传送指令 。其具体的实现方法是:讲一个基址存于寄存器中,然后通过数据传送指令进行取值,所以当使用数据传送指令取存储器中的数据(字)的时候,其 地址偏移量是基址+4 逻辑偏移量。按字节编址的情况下,所有字的起始地址必须是4的倍数,这就是 对齐限制 。
对立即数(也就是常数1,2··· 这些存放在存储器中的数据)的 *** 作一般都是相对于对寄存器 *** 作的指令加上一个i(immediately),对于无符号数则加上一个u,默认情况下是对寄存器进行有符号数的 *** 作。另外注意,由于“0”这个数用处远比别的常数大,所以专门在寄存器zero中存放了0,且恒为0;至于为什么大?有的时候是要判断一个数是否小于0有时候是要用0进行 *** 作,比如异或,或非等一些 *** 作可能用的上,所以其概率远远的高于别的常数,这就是前面讲过的“加速大概率事件发生”的重要思想的体现!
目前普遍采用二进制补码的方式实现负数,为什么呢?我也是一阵苦恼,后来慢慢的摸索发现,二进制补码可以直接进行想加 *** 作就得出其具体的数值,与无符号数完美的统一,具体的实现方式是把符号位,也就是最左端的一位作为符号位,然后在计算机十进制数值的时候,对符号位的十进制值取负数,然后与后面的位数的十进制数相加,就会得到其表示的负数,而取反码这一方式虽然正数负数对称,但是存在了两个0 的问题,对于粗心的程序员是很麻烦的,另外,求一个正数的相反数的补码表现形式很简单,补码=反码+1,比如0010 表示+2,第一位是符号位, 如果要取-2,那么只需要先变为1101,然后加1 ,得到1110,这就是二进制的-2的补码表示。转换为十进制的时候就是
当然,这一公式仅仅针对负数,正数的反码补码都是原码。
很多时候存在了把十六位数转换为32位数的情况。这个时候,只需要把符号位复制16次,并且把原来的16位数放在右边,符号位复制后的16个数放在左边,组合之后的32位数就是32位的符号数了。然后你再算相反数的补码表示,就会发现,好神奇哟~~
以上就是关于MIPS架构的主程序可以与ARM架构的主程序通用吗全部的内容,包括:MIPS架构的主程序可以与ARM架构的主程序通用吗、【计算机本科补全计划】指令:计算机的语言(MIPS) --计算机组成原理、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)