Board logo

标题: MIPS处理器(2) [打印本页]

作者: yuyang911220    时间: 2015-10-25 17:30     标题: MIPS处理器(2)

 8 MIPS32中的状态寄存器SR状态寄存器来设置处理器的一些功能集合,包括设置设置协处理器0~3的可用性的位CU0~CU3(28~31)  复位向量BEV中断屏蔽位8~15 KUc、IEc0~1,基本的CPU保护单位KUc为1时表示运行在内核态,为0时运行在用户模式。在内核态下,可以访问所有的地址空间和协处理器0,运行在用户态下值只能访问0x0000,0000~0x7fff,ffff之间的地址空间。
  KUp、IEp2~3当异常发生时,硬件把KUc、IEc的值保存到KUp、IEp中,并且将KUc、IEc设置为[1,0]——内核态、关中断。异常返回时rfe指令可以把KUp、IEp的内容复制到KUc、IEc中KUo、IEo当异常发生时,硬件把KUp、IEp的值保存到KUo、IEo中;返回时把KUo、IEo的内容复制到KUp、IEp中。
  上面三对KU/IE位构成了深度2的栈,异常发生时,硬件自动压栈,rfe指令从异常返回时,从栈中恢复数值还有一些其它的功能和状态位,可以参考相应的文档9 MIPS32中的Cause寄存器BD位:EPC中正常情况下存放了发生异常的指令,但是当着条指令存放在调转指令的延迟槽中时,那么EPC中存放的是这个跳转指令,否则这条跳转指令将得不到执行。
  IP位:告诉用户来临的中断ExcCode:这是一个5位的代码,告诉你哪一条异常发生了,可以根据这个从通用异常处理程序跳装到特定异常处理程序中。
  10 MIPS32的C语言中参数传递和返回值的约定caller至少使用16bytes堆栈空间存放参数,然后把这16 bytes存放到通用寄存器a0~a3中,called subroutine直接使用寄存器中的参数,同时caller堆栈中的16bytes的数据可以不去理会了。
  需要理解的是带有浮点参数和结构体的参数传递,对于带有浮点参数的传递需要看第一个参数是否是浮点,如果是浮点则将参数放到$f12和$f14这两个浮点寄存器中,如果第一个参数不是浮点数,则不用浮点寄存器存放参数。对于结构体的参数传递和x86类似对于整数和指针类型的参数返回值一般通过通用寄存器v0($2)返回,对于浮点返回类型,一般存放在$f0中返回。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0