ZKX's LAB

mips 寄存器能放多大的数

2020-07-16知识11

为什么 ARM 和 MIPS 那么多寄存器,x86 那么少? RISC目前有一款势头很猛的开源ISA,叫做RISCV,是体系结构界开山鼻祖,Berkley的David Patterson带领完成…在MIPS中,对通用寄存器进行分类有什么好处? 这可以看成一种约定,除了几个极为特殊的比如$0,$ra,$sp等,其他的其实也可以无差异化使用,对吧?那么给…mips有32个寄存器,示例程序中寄存器堆中只设计了31,少了哪个 如果用寄存器间接寻址方式,能访问的最大主存空间是多少(假定存储器按字节编址)?空间可达:2的32次方。4 K G Byte。MIPS 关于打开文件(13)的flag(a1寄存器) Million Instructions Per Second的缩写,每秒处理的百万级的机器语言指令数。这是衡量CPU速度的一个指标。像是一个Intel 80386 电脑可以每秒处理3百万到5百万机器语言指令,即我们可以说80386是3到5MIPS的CPU。MIPS只是衡量CPU性能的指标。为什么 ARM 和 MIPS 那么多寄存器,x86 那么少? 这与RISC更节省晶体管有关吗?另外,RISC寄存器多是否是很大优势?x86的寄存器数量是否成为它的瓶颈?MIPS at寄存器 设置专用的寄存器是为了防止和程序员编程所用的寄存器进行交叉产生不必要的麻烦。具体来说,比如他用$s1来干这个,那么如果你自己写的程序用到了$s1,这样汇编器在执行某些指令的时候把中间变量存到了$s1里,就会破坏你的数据,导致程序出错。而如果汇编器用$at,你用$s1,二者不想干扰,就不会有这种隐患。而关于第二个问题,其实$at不仅是数据重组,它有很多作用,整体来讲就是伪指令的中间变量,针对你的描述,猜想可能是针对li这条伪指令的,那么下边举一个例子:指令li$t1,40是一条伪指令,在汇编器中会转换成addi$t1,$zero,40但是li$t1,-4000000因为数字太大,需要拆开,则会被转换成lui$at,0xffc2ori$t1,$at,0xf700这之中,$at就作为一个中间变量来用的以上虽为手打,检查了一遍似乎没错=在MIPS中,对通用寄存器进行分类有什么好处 设置专用的寄存器是为了防止和程序员编程所用的寄存器进行交叉产生不必要的麻烦。具体来说,比如他用$s1来干这个,那么如果你自己写的程序用到了$s1,这样汇编器在执行某些指令的时候把中间变量存到了$s1里,就会破坏你的数据,导致程序出错。而如果汇编器用$at,你用$s1,二者不想干扰,就不会有这种隐患。而关于第二个问题,其实$at不仅是数据重组,它有很多作用,整体来讲就是伪指令的中间变量,针对你的描述,猜想可能是针对li这条伪指令的,那么下边举一个例子:指令li$t1,40是一条伪指令,在汇编器中会转换成addi$t1,$zero,40但是li$t1,-因为数字太大,需要拆开,则会被转换成lui$at,0xffc2ori$t1,$at,0xf700这之中,$at就作为一个中间变量来用的以上虽为手打,检查了一遍似乎没错=流水线mips在第五周期内有哪个寄存器正在写,哪个寄存器正在 经典的MIPS流水线分五级(1)IF取指(insturction fetch),从指令高速缓存(I-cache)获取下一条指令(2)RD读取寄存器(read register),读取该指令的源寄存器域指定的CPU寄存器的内容。(3)ALU算术逻辑单元(arithmetic/logic unit)在一个时钟周期内完成算术或者逻辑操作。(4)MEM访问内存(memory),该阶段指令可以读写数据高速缓存(D-cache)中的内存变量。(5)WB写回寄存器(write back),将操作结果值写道寄存器堆中。为什么mips要单独设一个zero寄存器 如果你想要把一个寄存器里的值移到另一个寄存器里,就要用到$zero.比如把%s0里的东西拷贝到$t0里就可以写为add$t0,$s0,$zero求救,做题 一、10-15:ABBCCB 16-20:AABCA 二、1:AD 2:AD 3:BD 4:BCD 5:BC

#汇编指令#mips#指令周期#通用寄存器

随机阅读

qrcode
访问手机版