zoukankan      html  css  js  c++  java
  • MIPS32寄存器详解

    通用寄存器

    MIPS32包含32个通用寄存器,硬件没有强制性的指定寄存器的使用规则,但是在实际使用中,这些寄存器的用法都遵循一系列的约定。

    $0 不管写入什么值,读该寄存器永远返回零;

    $31 永远存在正常函数调用指令(JAL/JR)的返回地址;

    $v0, $v1 用来存放一个子程序(函数)的非浮点运算的结果或者返回值,如果这两个寄存器不够存放需要返回的值,则通过内存完成;

    $a0~a3 用来传递子函数调用时前4个非浮点参数,从左到右,超过4个参数使用任务栈传递;

    $t0~t9 函数执行过程中存放临时变量,当调用子函数时,这些寄存器中的值可以被随意更改,无需保存;

    $s0~s8 子函数必须保证当函数返回时,这些寄存器的内容必须回复到函数调用之前的值,一般是在函数入口将s0~s8压栈,函数返回时,退栈;

    $k0, $k1 异常或者中断处理程序使用,可以随意使用,ISR结束不需要恢复寄存器值;

    $gp 全局指针,指向运行时君顶的静态数据(static data)区域的一个位置,将gp指针作为基地址,前后32KB的数据存取,只需要一条指令即可实现;

    $sp 栈顶指针,MIPS是大端模式,栈的增长方向是从高地址向低地址增长;

    协处理器0寄存器

    MIPS协处理器0是系统控制协处理器,主要实现CPU配置、高速缓存控制、异常和中断控制、定时器、事件计数器、奇偶校验、错误检测等功能。

    MIPS协处理器1是浮点协处理器,是浮点运算单元。

    MIPS协处理器2偶尔用于定制的ISA扩展或者在几个SoC应用中提供专用的寄存器。

    MIPS协处理器3是浮点指令处理器,主要处理浮点运算指令,即浮点运算的控制单元。

    协处理器0操作指令

    1、写CP0协处理器寄存器

    mtc0    s, <n>    #把CPU通用寄存器s的值写入CP0寄存器n中

    当MIPS刚问世时,最多可以支持32个CP0寄存器,但是后续的MIPS32/64最多可以支持256个CP0寄存器。为了保持指令向前兼容,通过在CP0寄存器号(实际上是指令中以前编码为0的域)后附加3位的select域来实现。这样就出现了CP0 12.1这种写法的寄存器,访问方式如下:

    mtc0    s, $12, 1 #把CPU通用寄存器s的值写入CP0寄存器12.1中

    2、读CP0协处理器寄存器

    mfc0    d, <n>    #从CP0寄存器n取值写入CPU通用寄存器d中
  • 相关阅读:
    重温redis命令
    CI框架整合yar
    redis 常用配置
    php 安装yar扩展
    linux 最小安装 需要的后续操作
    centos7 安装php7+mysql5.7+nginx+redis
    mysql 存储过程和事件调度
    mysql的分区和分表
    mysql 范式和反范式
    mysql服务器和配置优化
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/15010301.html
Copyright © 2011-2022 走看看