MIPS 通用寄存器

实验四 MIPS寄存器文件设计 Logisim Logisim MIPS寄存器文件设计 阅读详情
MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下:

下表描述32个通用寄存器的别名和用途

REGISTER

NAME

USAGE

$0

$zero

常量0(constant value 0)

$1

$at

保留给汇编器(Reserved for assembler)

$2-$3

$v0-$v1

函数调用返回值(values for results and expression evaluation)

$4-$7

$a0-$a3

函数调用参数(arguments)

$8-$15

$t0-$t7

暂时的(或随便用的)

$16-$23

$s0-$s7

保存的(或如果用,需要SAVE/RESTORE的)(saved)

$24-$25

$t8-$t9

暂时的(或随便用的)

$28

$gp

全局指针(Global Pointer)

$29

$sp

堆栈指针(Stack Pointer)

$30

$fp

帧指针(Frame Pointer)

$31

$ra

返回地址(return address)



下面给以详细说明:
$0:即$zero,该寄存器总是返回零,为0这个有用常数提供了一个简洁的编码形式。
           move $t0,$t1
       实际为
           add $t0,$0,$t1
       使用伪指令可以简化任务,汇编程序提供了比硬件更丰富的指令集。
$1:即$at,该寄存器为汇编保留,由于I型指令的立即数字段只有16位,在加载大常数时,编译器或汇编程序需要
       把大常数拆开,然后重新组合到寄存器里。比如加载一个32位立即数需要 lui(装入高位立即数)和addi两条
       指令。像MIPS程序拆散和重装大常数由汇编程序来完成,汇编程序必需一个临时寄存器来重组大常数,这
       也是为汇编 保留$at的原因之一。
$2..$3:($v0-$v1)用于子程序的非浮点结果或返回值,对于子程序如何传递参数及如何返回,MIPS范围有一套约
       定,堆栈中少数几个位置处的内容装入CPU寄存器,其相应内存位置保留未做定义,当这两个寄存器不够存
       放返回值时,编译器通过内存来完成。
$4..$7:($a0-$a3)用来传递前四个参数给子程序,不够的用堆栈。a0-a3和v0-v1以及ra一起来支持子程序/过程
       调用,分别用以传递参数,返回结果和存放返回地址。当需要使用更多的寄存器时,就需要堆栈(stack)
       了,MIPS编译器总是为参数在堆栈中留有空间以防有参数需要存储。
$8..$15:($t0-$t7)临时寄存器,子程序可以使用它们而不用保留。
$16..$23:($s0-$s7)保存寄存器,在过程调用过程中需要保留(被调用者保存和恢复,还包括$fp和$ra),MIPS
       提供了临时寄存器和保存寄存器,这样就减少了寄存器溢出(spilling,即将不常用的变量放到存储器的过程),
       编译器在编译一个叶(leaf)过程(不调用其它过程的过程)的时候,总是在临时寄存器分配完了才使用需要
       保存的寄存器。
$24..$25:($t8-$t9)同($t0-$t7)
$26..$27:($k0,$k1)为操作系统/异常处理保留,至少要预留一个。 异常(或中断)是一种不需要在程序中显示
       调用的过程。MIPS有个叫异常程序计数器(exception program counter,EPC)的寄存器,属于CP0寄存器,

       用于保存造成异常的那条指令的地址。查看控制寄存器的唯一方法是把它复制到通用寄存器里,指令mfc0
       (move from system control)可以将EPC中的地址复制到某个通用寄存器中
,通过跳转语句(jr),程序可以返
       回到造成异常的那条指令处继续执行
。MIPS程序员都必须保留两个寄存器$k0和$k1,供操作系统使用。

       发生异常时,这两个寄存器的值不会被恢复,编译器也不使用k0和k1,异常处理函数可以将返回地址放到这
       两个中的任何一个,然后使用jr跳转到造成异常的指令处继续执行
。
$28:($gp)为了简化静态数据的访问,MIPS软件保留了一个寄存器:全局指针gp(global pointer,$gp),全局指针
       只想静态数据区中的运行时决定的地址,在存取位于gp值上下32KB范围内的数据时,只需要一条以gp为基
       指针的指令即可。在编译时,数据须在以gp为基指针的64KB范围内。
$29:($sp)MIPS硬件并不直接支持堆栈,你可以把它用于别的目的,但为了使用别人的程序或让别人使用你的程
       序, 还是要遵守这个约定的,但这和硬件没有关系。
$30:($fp)GNU MIPS C编译器使用了帧指针(frame pointer),而SGI的C编译器没有使用,而把这个寄存器当作保
       存寄存器使用($s8),
这节省了调用和返回开销,但增加了代码生成的复杂性。
$31:($ra)存放返回地址,MIPS有个jal(jump-and-link,跳转并 链接)指令,在跳转到某个地址时,把下一条指令的
       地址放到$ra中。用于支持子程序,例如调用程序把参数放到$a0~$a3,然后jal X跳到X过程,被调过程完成后
       把结果放到$v0,$v1,然后使用jr $ra返回。
计组头哥实验 实验三 MIPS寄存器实验 了解 MIPS 寄存器文件基本概念,进一步熟悉多路选择器、译码器、解复用器等 Logisim 组件的使用,并利用相关组件构建 MIPS 寄存器文件。 阅读详情

相关推荐

MIPS 寄存器

概要 MIPS寄存器 RISC的一个显著特点就是大量使用寄存器。因为寄存器的存取可以在一个时钟周期内完成,同时简化了寻找方式,所以,MIPS的指令中除了加载/存储指令以外,都使用寄存器或者立即数作为操作数,以便让编译器通过保持对寄存器内数据的频繁存取进一步优化代码的生成性能。   MIPS32寄存器分为两类:通用寄存器(GPR)和特殊寄存器。 通用寄存器(GPR) 在MIPS体系结构中有32个通用寄存器,在汇编程序中可以用编号$0~$31表示,也可以用寄存器的名字表示,如sp、sp、sp、t1、$ta等,如

极客驿站 7294

MIPS体系结构(1)

MIPS中的寄存器 32个通用寄存器:寄存器编号 助记符 用法 0 zero 永远返回值为0 1 at 用做汇编器的暂时变量 2-3 v0, v1 子函数调用返回结果 4-7 a0-a3 子函数调用的参数 8-15 t0-t7 暂时变量,子函数使用时不需要保存与恢复 24-25 t8-t9 16-23 s0-s7 子函数寄存器变量。子函数必须保存和恢复使用过的变量在函数返回之前,从而调用函数知道这些寄存器的值没有变化。 26,27 k0,k1 通常被中断或异常处理程序使用作为保存一些系统参数 28 gp 全

ustc517551033的专栏 803

MIPS汇编:MIPS32中通用寄存器的使用约定

这段时间一直在学习MIPS32汇编。MIPS32并没有强制指定通用寄存器的使用规则(除了0号寄存器始终为0,比较特殊),但是在实际使用中大家都会遵循一系列的约定。这里以表格的方式予以展示,当作是做个笔记,方便自己以后回看。

HOH_mizukun的博客 2123

MIPS 通用寄存器 + 指令

MIPS通用寄存器 MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1 $at 保留给汇编器(Re

gujing001的专栏 8万+

存储系统设计(HUST)--第2关:MIPS寄存器文件设计

主页有专栏

qq_66047907的博客 3706

MIPS寄存器文件设计.txt

完成存储扩展设计后,可以在寄存器文件自动测试电路中进行测试,电路会自动进行评分,确认实验完成正确后,可利用文本编辑工具打开 storage.circ ,将所有文字信息复制粘贴到 Educoder 平台的 storage.circ 文件中,再点击评测按钮即可进行本关测试。平台会对你设计的电路进行自动测试,为方便测试,请勿修改子电路封装,

MIPS的32个通用寄存器

本文对MIPS的32个通用寄存器及它们的常用场合进行了小结,先看一张比较官方的截图。 zero 它一般作为源寄存器,读它永远返回0,也可以将它作为目的寄存器写数据,但效果等于白写。为什么单独拉一个寄存器出来返回一个数字呢?答案是为了效率,MIPS的设计者只允许在寄存器内执行算术操作,而不允许直接操作立即数。所以对最常用的数字0单独留了一个寄存器,以提高效率 at 该寄存器为

亦大乐谍的嵌入式分享小站——思考/验证/总结/分享 1万+

MIPS寄存器文件 (练习)

在行为VHDL中(使用3个并发进程)描述图1所示的MIPS寄存器文件,该文件通过以下接口支持3操作数算术运算: • Generics: - Register file size/depth (reg_file_depth with default value of 23 registers) - Register file width (reg_file_width with default value of 32 bits) • Inputs: - Clock (clk -> 1 bit) - Asynchronous reset (rst -> 1 bit) - Register write enable (RegWrite -> 1 bit) 1 -> enable writing to register file, 0 -> disable writing to register file - Read Address for first (read) operand (RA1 -> [log2 (reg_file_depth)] bits) - Read Address for second (read) operand (RA2 -> [log2 (reg_file_depth)] bits) - Write Address for third (write) operand (WA -> [log2 (reg_file_depth)] bits) - Write Data for third (write) operand (WD -> reg_file_width bits) • Outputs: - Read Data for first (read) operand (RD1 -> reg_file_width bits) - Read Data for second (read) operand (RD2 -> reg_file_width bits) • In Vivado - Create a blank project - Add design and simulation source files - Run behavioral simulation - Your waveform configuration should be identical to the provided waveform snapshot, see Figure 2. • In your design: - Guard against address-spilling (address-overflow) where addresses could go out of range, e.g., exceeding the register file size/depth. - Guard against unintentional writes to register zero ($0), i.e., $0 is read-only and has always the value 0.

mips通用寄存器

MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1 $at 保留给汇编器(Reserved fo

zhuzeji的专栏 757

编译CycloneDDS和CycloneDDS-CXX踩过的坑——CMake Error at CMakeLists.txt:227 (find_package):

最近编译CycloneDDS和CycloneDDS-CXX踩了两个坑,花了不少时间。做个简单的记录,免得以后又踩到。注意:CycloneDDS-CXX编译依赖CycloneDDS,因此必须先编译CycloneDDS需要严格按照步骤进行,否则要入坑步骤如下,1先编译CycloneDDS以上步骤完成CycloneDDS的编译和安装,生成的bin include lib等位于install目录下面。

usstmiracle的博客 1900

终端效率神器:Tmux 安装与使用全指南

终端效率神器:Tmux 安装与使用全指南

身在被窝_心在编程 1357

MIPS通用寄存器介绍

MIPS有32个通用寄存器($0-$31),各寄存器的功能及汇编程序中使用约定如下: 下表描述32个通用寄存器的别名和用途 ;REGISTER NAME USAGE $0 $zero 常量0(constant value 0) $1 $at 保

咸鱼的笔记 2628

Xilinx SDK工程编译、链接、调试注意事项

1、添加工程 启动SDK时选取workspace,如下图所示: 对应的workpace文件夹中会生成如下几个文件: 如果当前workspace是首次加载工程,SDK会进入启动界面 点击Import Project,导入已有工程 点击Browse,添加工程路径,一个完整的工程包含一个bsp文件夹,一个HW文件夹,和一个src文件夹(添加C功能函数) 点击Fini...

Autumn_He的博客 1万+
上一篇: MIPS 汇编指令学习
下一篇: MIPS汇编语言SYSCALL指令的用法
csshuke
博客等级 码龄16年 1517粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值