-
2021-11-05 17:49:55
指令组
指令
空操作 nop、ssnop(不能和其他指令同时发射,至少需要一个时钟周期) 寄存器间的数据传送指令 move、movf、movt、movn、movz(后四个为条件传递指令) 常数加载指令 dla、la(获取某些标号地址或程序中变量地址的宏指令);dli、li(加载常数立即数指令);lui(加载高位立即数指令) 算术/逻辑操作指令 addu、addiu、daddu,daddiu(加法指令);dsub、sub(会触发溢出陷入的减法操作);dsubu、subu(普通减法指令);abs、dabs(求绝对值操作);dneg、neg、dnegu、negu(一元非操作);and、andi、or、ori、xor、xori、nor、not(按位逻辑指令);drol、dror、rol、ror(循环左移和右移);dsll、dsll32、dsllv(64位左移,低位补零);dsra、dsra32、dsrav(64位算术右移指令);dsrl、dsrl32、dsrlv(64位逻辑右移指令);sll、sllv(32位左移指令);sra、srav(32位算术右移指令);srl、srlv(32位逻辑右移指令);slt、slti、sltiu、sltu(硬件指令,条件满足就写入1,否则写0);seq、sge、sgeu、sgt、sgtu、sle、slue、sne(根据更复杂的条件设置目的寄存器的宏指令) 整数乘法、除法以及求余指令 ddiv、ddivu、div、divu(整数除法的3操作数宏指令分别处理64位或32位有符号或无符号数);divo、divou(明确该指令是带有溢出检查的除法指令);dmul、mul(3操作数64位或32位乘法指令,没有溢出检查);mulo、mulou、dmulo、dumlou(乘法宏指令,如果结果不能存入一个通用寄存器,发生溢出,触发异常);dmult、dmultu、mult、multu(执行有符号/无符号32/64位乘法的机器指令);drem、dremu、rem、remu(求余操作);mfhi、mflo、mthi、mtlo(用于访问整数乘除单元的结果寄存器hi和lo) 存取指令(内存访问指令) lb、lbu(加载一个字节,高位可以补零,或进行符号扩展,以补充整个寄存器的长度);ld(加载一个双字);ldl、ldr、lwl、lwr、sdl、sdr、swl、swr(向左、向右加载、存储一个字、双字);lh、lhu(加载一个半字,高位可以补零,或进行符号扩展,以补充整个寄存器的长度);lw、lwu(加载一个字);pref、prefx(把数据预取到缓冲);sb、sd、sh、sw(存储字节、双字、半字、字);uld、ulh、ulhu、ulw、usd、usw、ush(地址非对齐的数据存取宏指令);l.d、l.s、s.d、s.s(存取双精度和单精度浮点数的指令,地址必须对齐);ldxcl、lwxcl、sdxcl、swxcl(采用基址寄存器+偏移寄存器的寻址方式存取指令); 跳转、分支和子程序调用指令 j(无条件跳转到一个绝对地址,访问256M的代码空间);jal、jalr(直接或间接子程序调用,这种跳转不仅能跳转到指定地址,而且可以顺便把返回地址(当前指令地址+8)放到ra寄存器中);b(基于当前指令地址的无条件相对跳转);bal(基于当前地址的函数调用指令);bc0f、bc0f1、bc0t、bc0t1、bc2f、bc2f1、bc2t、bc2t1(根据协处理器0和2的条件标志进行跳转);bc1f、bc1f1、bc1t、bc1t1(根据浮点条件标志位进行跳转);beq、beq1、beqz、beqz1、bge、bge1、bgeu、bgeu1、bgez、bgez1、bgt、bgt1、bgtu、bgtu1、bgtz、bgtz1、ble、ble1、bleu、bleu1、blez、blez1、blt、blt1、bltu、bltu1、bltz、bltz1、bne、bnel、bnez、bnezl(双操作数和单操作数的比较跳转指令);bgeza1、bgeza11、bltza1、bltza11(如果需要 ,这些指令是用于有条件函数调用的原始机器指令); 断点及陷阱指令 break(产生一个“断点”类型的异常);sdbbp(产生EJTAG异常的断点指令);syscall(产生一个约定用于系统调用的异常类型);teq、teqi、tge、tgei、tgeiu、tgeu、tlt、tlti、tltiu、tltu、tne、tnei(条件异常指令,对一个或两个操作数进行条件测试); 协处理器0的功能 cfc0、ctc0(把数据拷进和拷出协处理器0的控制寄存器);mfc0、mtc0、dmfc0、dmtc0(在通用寄存器和协处理器0寄存器之间交换数据);cfc2、ctc2、dmfc2、dmtc2、mfc2、mtc2(协处理器2的指令); 更多相关内容 -
MIPS指令集
2018-11-23 11:45:04MIPS指令集 MIPS指令集 MIPS指令集 MIPS指令集MIPS指令集 -
Verilog语言描述的MIPS指令集.zip
2020-04-30 12:18:19利用Verilog语言描述的mips指令集,基于quartus 9.0及以上版本,内部引脚需根据设计要求自行更改,我用的是cyclone 3的芯片 -
MIPS 指令集 详解及例子
2018-04-11 08:57:56MIPS 指令集的详解及例子, 有需要的请下载, 希望对你有帮助 -
MIPS 指令集.pdf
2020-01-09 23:20:07mips指令集文档,适合做mips架构开发. MIPS(Million Instructions Per Second):单字长定点指令平均执行速度 Million Instructions Per Second的缩写,每秒处理的百万级的机器语言指令数。这是衡量CPU速度的一个... -
MIPS指令集 .pdf
2020-04-30 11:27:29MIPS指令的机器码字段信息,以及每种信息的汇编解析指令的操作方式,便于计算机工程师和IC设计工程师 在基于MIPS电路设计和程序设计的时候 进行参考 -
基于MIPS指令集的32位RISC处理器逻辑设计
2021-05-09 18:21:28一篇不错的本科论文,仅供参考,资源来自网络 -
MIPS指令集.rar
2020-06-03 21:04:21MIPS指令集 包含所有MIPS指令及其伪代码描述。计算机组成原理实验必备。 -
MIPS指令集手册
2018-10-10 19:54:56该文档为标准MIPS指令集的手册,英文版,内容详细清晰 -
论文研究-基于MIPS指令集的超标量和超长指令字混合架构处理器设计.pdf
2019-07-22 18:45:22针对嵌入式和移动设备对处理器高性能低功耗日趋强烈的要求,提出一种基于MIPS指令集的顺序超标量和超长指令字混合架构处理器设计方案,便于以同构多核架构代替目前业界普遍采用的CPU与DSP异构结构,降低功耗面积,... -
Assembler:这是将 MIPS 指令集的子集转换为机器代码的汇编程序的实现
2021-06-16 21:39:10这是将 MIPS 指令集的子集转换为机器代码的两遍汇编程序的实现。 该汇编器仅使用 MIPS 指令代码的 .text 段。 在较高的层次上,我们的汇编器的功能可以划分如下: 第 1 步:读取输入 (.s) 文件。 注释被剥离,伪... -
MIPS指令集及汇编
2021-03-04 20:08:10MIPS指令集及汇编 由于本人最近在看底层操作系统与汇编的有关书籍,故写此博文总结,以便后续本人及感兴趣朋友阅读。如有错误恳请指出,一起学习,一起进步! 目录 MIPS指令集及汇编 一、MIPS简介: ...MIPS指令集及汇编
由于本人最近在看底层操作系统与汇编的有关书籍,故写此博文总结,以便后续本人及感兴趣朋友阅读。如有错误恳请指出,一起学习,一起进步!
目录
一、MIPS简介:
1.MIPS为美国芯片设计公司,它采用的是精简指令系统计算结构(RISC结构)(与之对应的:(复杂指令集)CISC结构)。MIPS架构的产品多见于工作站(索尼PS2的Emotion Engine处理器)。RISC比CISC的设计更加简单,由于其授权费用低,被INTEL外的大多数厂商使用。同时在设计理念上MIPS强调软硬件协同提高计算机性能,并简化硬件设计。
2.MIPS 是最早的,最成功的RISC处理器之一,源于Stanford 大学的John Hennessy 教授的研究成果。(Hennessy 于1984年在硅谷创建了MIPS公司)。MIPS是(Microcomputer without interlocked pipeline stages)的缩写,含义是无互锁流水级微处理器。
3.MIPS的指令系统经过通用处理器指令体系MIPS I、 MIPS II、MIPS III、MIPS IV到MIPS V,嵌入 式指令体系MIPS16、MIPS32到MIPS64的发展 已经十分成熟。应用广泛的32位MIPS CPU包括R2000,R3000 其ISA都是MIPS I,另一个广泛使用的、含有许多 重要改进的64位MIPS CPU R4000及其后续产 品,其ISA版本为MIPS III。龙芯2E微处理器是一款实现64位MIPSⅢ指令集的通用 RISC处理器,与X86指令架构互不兼容;芯片面积 6.8mm×5.2mm;最高工作频率为1GHz;实测功耗5-7瓦。由于与X86指令的不 兼容,龙芯2E无法运 行现有的Windows 32/64位操作系统, 和基于Windows的 众多应用软件。
龙芯2E芯片 二、MIPS体系结构
1.寄存器特点:
MIPS 包含32个通用寄存器 ($0-$31均为32 位), 硬件没有强制性的指定寄存器 使用规则,但是在实际使用 中,这些寄存器的用法都遵循 一系列约定,寄存器约定用法引入了一系列 的寄存器约定名。在使用寄存 器的时候,要尽量用这些约定名或助记符,而不直接引用寄 存器编号。
(1)两个特殊寄存器:
$0:不管你存放什么值,其返回值永远是零。
$31:永远存放着正常函数调用指令(jal)的返回地址。
(2)$at :
由编译器生成的复合指令使用,
(3)$v0, $v1:
用来存放一个子程序 (函数) 的非浮点 运算的结果或返回值。如果这两个寄存器不够存放 需要返回的值,编译器将会通过内存来完成。
(4)$ a0-a3:
用来传递子函数调用时前4个非 浮点参数。
(5)$ t0-t9:
依照约定,一个子函数可以不用保 存并随便的使用这些寄存器。在作表达式计算时,这些寄存器是非常好的暂时变量。当调用一个子函数时,这些寄存器中的 值有可能被子函数破坏掉。所以也是最不安全的。
(6)$ s0-s8:
依照约定,子函数必须保证当函数返回时这些寄存器的内 容必须恢复到函数调用以前的值, 或者在子函数里不用这些寄存器或把它们保存 在堆栈上并在函数退出时恢复。 这种约定使得这些寄存器非常适合作为寄存器变量、 或存放一些在函数调用期间必须保存的原来的值。(类比:x86汇编中的函数序言和函数尾声)
(7)$ k0, k1:
被OS的异常或中断处理程序使 用。被使用后将不会恢复原来的值。因此它 们很少在别的地方被使用。
(8)$gp:
如果存在一个全局指针,它将指向运行时决定 的静态数据(static data)区域的一个位置。这意味 着,利用gp作基指针,在gp指针32K左右的数 据存取,系统只需要一条指令就可完成。该指令如图:
如果没有全局指针,存取一个静态数据区域 的值需要两条指令:一条是获取有编译器和loader决定好的32位的地 址常量。另外一条是对数据的真正存取。为了使用$ gp, 编译器在编译时刻必须知道 一个数据是否在$ gp的64K(上下32k)范围之内。并不是所有的编译和运行系统支持gp的使用。
(9)$ sp:
堆栈指针的上下需要显 式的通过指令来实现。因此 MIPS通常只在子函数进入和 退出的时刻才调整堆栈的指针。 这通过被调用的子函数来实现。SP通常被调整到这个被调用 的子函数需要的堆栈的最低的 地方,从而编译器可以通过相 对於sp的偏移量来存取堆栈上 的堆栈变量。
(10)$ fp(另外的约定名是s8):
fp作为框架指针可以被函数用来记录堆栈的情况,在一 个过程中变量相对于函数指针的偏移量是不变的。(相对地址)一些 编程语言显示的支持这一点。汇编编程员经常会利用fp的 这个用法。C语言的库函数 alloca()就是利用了fp来动态 调整堆栈的。
注意:如果堆栈的底部 在编译时刻不能被决 定,你就不能通过$ sp 来存取堆栈变量,因此 $ fp被初始化为一个相 对于该函数堆栈的一个 常量的位置。 这种用法对其他函数可 以是不可见的。
(11)$ ra:
当调用任何一个子 函数时,返回地址存放 在ra寄存器中,因此通常 一个子程序的最后一个 指令是: jr ra .子函数如果还要调用其 他的子函数,必须保存ra 的值,通常通过堆栈。
(12)其他方面:
MIPS里没有状态码。CPU状态寄存器或内 部都不包含任何用户程序计算的结果状态信息。
hi 和 lo 是与乘法运算器相关的两个寄存器,是用来存放结果的地方。 它们并不是通用寄存器,除了用在乘除法之 外,也不能有做其他用途。 MIPS里定义了一些指令可以往hi和lo里存入任 何值。
浮点运算协处理器 (浮点加速器,FPA),如果存在的 话,有32个浮点寄存器。按汇编语言的简单约定讲, 是从$f0到$f31。
实际上,对於MIPS I和MIPS II的机器,只有16个偶数号的寄存器可以用来做数学计算。当然,它们可以既 用来做单精度(32位)和双精度(64位)。当你做一个双精度的运算时,寄存器$f1存放$f0的余数。奇数号的寄存器只用来作为寄存器与FPA之间的数据传送。MIPS III CPU有32个FP寄存器。但是为了保持软件与 过去的兼容性,最好不要用奇数号的寄存器。
对比一下x86寄存器结构:
寄存器约定小结:
2.整数乘法单元和寄存器
MIPS体系结构认为乘法非常重要,应该用硬件实现乘法指令,这在RISC CPU中并不常见。乘法结果寄存器是互锁的:只有在整数乘法 运算完成,得到完整的结果后,才能读取结 果寄存器。牺牲速度以换取执行简单和节省芯片空间。
3.寻址方式
只有加载或存储指令可以访问存储器。存储器的寻址方式为 基址-偏移寻址(存储单元的地址是某个寄存 器与指令中的偏移量之和)。
4.存储器和寄存器中的数据类型
MIPS CPU的一次操作可读出或写入1~8个字节的数据,*MIPS编译器提供了64位指针,它把long解释成64位数 据,总之long不应该小于int 。
三、MIPS指令与汇编
1.指令格式
对于一条汇编语言指令来说,有两个问题要解决:
• 要指出进行什么操作
• 要指出大多数指令涉及的 操作数 和 操作结果 放在何处
操作数
在MIPS中字(4个字节)的地址必须是4的倍数,存取数据时可以避免一个数据分两次存取。
MIPS有三种指令格式:(所有指令都是32 位长)
(1)R-型 指令:
一条32位的MIPS R型指令按下表bit数划分为 6个字段:6 + 5 + 5 + 5 + 5 + 6 = 32bit
6 5 5 5 5 6
实例: add $8, $17, $18 # $8 = $17 + $18
第一个操作数是寄存器$17,第二个寄存器是$18,目的寄存器结果是$8.该指令没有移位。因为,加法是运算指令,指令操作类型码op是0,funct是32。
所以格式是:
0
$ 17
$18
$ 8
0
32
(2)I-型 指令
一条32位的MIPS I型指令 按下表bit数划分为4 个字段: 6 + 5 + 5 + 1 6 = 32bit
6 5 5 16
I-型指令分类:装入/存储指令、分支指令和 立即数运算指令
数据装入:Rt = Mem[Rs + Address]
数据存储:Mem[Rs + Address] = Rt
实例: lw $s1, 100($s2) # 暂时寄存器 $s1=A[i],并假设Astart= 100
第一个操作数是寄存器 $s2 , 第二个操作数是寄存器$s1 ; 数组的起始地址是Astart, 称为表头地址.
所以这条指令的格式是:
35
$s2
$s1
100
分支指令: if (Rs <relation> Rt) goto (PC+4) + Address (PC 为程序计数器,指向当前执行的指令)
分支指令采用的寻址方式为 PC相对寻址 ——分支 目标的地址是 (PC+4)(下一条指令的地址)与指令中的偏移量之和
立即数运算指令 : addi $21, $22, -50 (立即数 可以为十进制) # 将 $22 与 -50 相加 ,并将结果保存在 $21 中。
所以这条指令的格式是:
8
$22
$21
-50
(3) J-型 指令:
一条32位的MIPS J型指令 按下表bit数划分为 2 个字段: 6 + 26 = 32bit
6 26
操作码 目标地址
2.寻址方式
(1)寄存器寻址:MIPS算术运算指令的操作数必须从32个32位寄存器中选取
实例:
(2)立即数寻址:
以常数作为操作数,无须访问存储器就可以使用常数。 因为常数操作数频繁出现,所以在算术指令中加入常数字段,比从存储器中读取常数快得多。
实例:
addi $sp, $sp, 4(常数) # $ sp =$ sp + 4
小问题:怎么样将一个32 位的常数装入寄存器 $s0 中 呢???
(分两次装入,先装入高16位,在装入低16 位) 如图:
0000 0000 0011 1101(高16位) 0000 1001 0000 0000 (低16位)
61 2304
(3)基址或偏移寻址:
操作数在存储器中,且存储器地址是某寄存器与指令中某常量的和。
实例:
Lw $t0, 8 ($ s0 ) # $s0 中装的是存储器中的地址
(4)PC相对寻址
实例:
条件分支指令 bne $s0, $s1, Exit #如果 $s0不等于 $s1,则跳转到 Exit
PC = PC + 分支地址
问题1:为什么选PC寄存器?
因为几乎所有的条件分支指令都是跳转到附近的地址。
问题2:如何处理16位无法表达的远距离分支?
插入一个无条件跳转到分支目标地址的指令,把分支 指令中的条件变反以决定是否跳过该指令。
(5)伪直接寻址:
跳转地址= PC中原高4位 + 指令中的26位 + 00 (32位地址)
寻址方式总览:
3.指令系统
(1)数据传送指令
(2)算术/逻辑指令
每条指令有且仅有3个操作数,且只执行一个操作
R格式——ALU指令的格式
Rs、Rt、Rd为寄存器编号
Funct字段为指令功能代码
乘法除法(multiply / divide)指令 演示图:
算术指令总体概览图:
无符号整数一般都是用来表示存储器地址 , 溢出即使发生,也大多数被忽略掉了,因此 MIPS采用了两种不同的算术运算指令来分别处理 。
( 1 ) addu, addiu, subu在发生溢出的时 候不产生异常
( 2 )add, addi, sub在发生溢出时产生异常
发生溢出的情况:
加法:两正数相加结果为负,两负数相加结果为正
减法:正数减负数结果为负,负数减正数结果为正
MIPS在检测到溢出发生时会产生一个异常,造成溢出 指令的地址被存到一个特定寄存器中
乘法:multu Hi不为 0 ,mult Hi各位不等于Lo符号位
MIPS 乘 /除法指令都忽略了溢出的情况,程序必须自己 判断得到的积 /商是否超出了32位寄存器能表示的范围,还必须自己处理除零操作
逻辑指令总体概览图:
说明:
MIPS的符号位扩展;
那么什么时候立即数被符号位扩展呢?
算术指令 总是将立即数做符号位扩展即便指令是无符号的!
逻辑指令(andi, ori通常处理无符号数)不对立即 数做符号位扩展 (They are zero extended)
load / store指令 地址计算时总是扩展立即数
乘 / 除 指令 任何情况下都不进行扩展,总是当成 usigned
addiu 在执行前也要将指令中的立即数进 行符号位扩展,因为:虽然U代表无符号 数,但是addiu事实上都被看作一条不会 发生溢出的add指令,因此常用它来加上 一个负的立即数。
(3)控制类指令
如果要实现其他比较功能,则需要两个以上的指令
基本上都是与零比较(这个速度快)
控制类指令概览:(跳转分支和比较指令)
四、杂记(MIPS计算机硬件对函数调用(过程)的支持)
1.为新数据分配空间
利用堆栈去存储函数调用的过程中不适合用寄存器保存的局部变量(如局部数组或结构)。
过程框架:也叫活动记录,是指包含了函数调用(过程)保存的寄存器和局部变量的堆栈段。下图给出了过程调用之前、之中和之后的堆栈状态。
框架指针$fp指向框架的第一个字,通常是保存调用的参数寄存器。栈指针$sp指向栈顶,在程序执行的过程中栈指针有可能改变。因此通过固定的框架指针来访问变量要比用栈指针更简便。如果一个过程的栈中没有局部变量,编译器将不 设置和恢复框架指针,以节省时间(主要是通过 $fp 来访问局部变量)。当需要框架指针时,以调用时的$sp值作为框架 指针的初值,调用返回时,根据$fp恢复$sp值。
2.MIPS 程序和数据的存储器空间使用约定
从顶端开始,对栈指针初始化为 7fffffff,并向下向数据段增长; 在底端,程序代码(文本)开始于 00400000; 静态数据开始于10000000; 紧接着是由C中malloc进行存储器分 配的动态数据,朝堆栈段向上增长 。
全局指针被设定为易 于访问数据的地址, 以便使用相对于$gp 的±16位偏移量 0x1000 0000 -- 0x1000 ffff
在32位MIPS体系结构下,最多可寻址4GB地址空间。在4GB空间情况下内存地址空的分配如下图:
MIPS体系结构下,程序计数器(PC)不是一个寄存 器,在一个具有流水线的CPU中,程序计数器的值在一 个给定的时刻有多个可选值,但可见的只有一个。
至此,本文的长篇大论终于结束了,希望能够对阅读的朋友有些帮助。若有错误恳请指出,共同学习进步!欢迎有问题的朋友评论,一起交流讨论。
-
MIPS指令集 指令集概述
2020-11-08 10:48:43我们学习的主要是MIPS处理器架构下的MIPS指令集 一个程序往往也是一堆指令的集合,处理器执行时一般情况是按顺序一条一条执行的 比如有三条指令 A,B,CA,B,CA,B,C,其含义分别如下: A:a=1A:a=1A:a=1 B:a=a+1B:a=a+1...目录
https://blog.csdn.net/weixin_45792450/article/details/109314693
处理器的出现
CPU,真名叫中央处理器(Central Processing Unit)是计算机的大脑,作为计算机系统的运算和控制中心,在计算机中处于绝对的核心地位和统治霸权。
众所周知,计算机系统由五部分组成:运算器,控制器,存储器,输入设备,输出设备,这几部分各司其职,协同合作,统筹的模型早在计算机起源设计之初就被大神冯诺依曼界定。
在1971年的时候,Intel首次将控制器和运算器集成在一块电路板上时,就标志着CPU的诞生了,并美名其曰叫微处理器。从此以后,CPU的发展让Intel尝到了甜头,给其带来了巨大的经济收益,并奠定了其芯片巨头的巨无霸地位。
历经悠悠几十载,CPU已经发生了翻天覆地的变化。从起初的8位处理器,到16位,再到32位,最后到今天的64位处理器,在数据处理的能力上其越来越出色了。而在CPU中执行的指令系统,也越发完善,时至今日分为两大派系:精简指令集RISC(Reduced Instruction Set Computer),复杂指令集CISC(Complex Instruction Set Computer)。前者主打指令功能的基础性,指令系统的简单性,相当于简单派;后者主打指令功能的完善,放弃指令系统设计复杂性,相当于实用派。
处理器的架构
CPU两大派系:精简指令集RISC,复杂指令集CISC
CISC中,强大的架构有:定位于电脑的X86/X64架构,定位于手机平板的ARM架构
RISC中,强大的架构有:定位于嵌入式系统的MIPS架构
X86架构,X64架构代表巨头:Intel,AMD
ARM架构代表巨头:ARM公司
MIPS架构代表巨头:MIPS公司
处理器的指令集
不同的处理器架构,底层的CPU电路设计可能差异很大,自然在设计对应的软件底层实现会不一样,也就是底层的机器指令会不一样。
简单来说,针对不同的处理器架构,有不同的指令集。比如X86架构下的指令集,一般无法在其他架构下完全适配,因为底层逻辑电路实现可能不匹配。
因此,指令集是针对特定的处理器架构,设计出来的一套机器指令的集合。
我们学习的主要是MIPS处理器架构下的MIPS指令集
一个程序往往也是一堆指令的集合,处理器执行时一般情况是按顺序一条一条执行的
比如有三条指令 A , B , C A,B,C A,B,C,其含义分别如下:
A : a = 1 A:a=1 A:a=1
B : a = a + 1 B:a=a+1 B:a=a+1
C : a = a − 1 C:a=a-1 C:a=a−1
那么某一程序可按如下顺序组织:
A A A
B B B
B B B
B B B
C C C
C C C
B B B在存储器中,这7条指令就是按顺序存储的,执行时一般也是按顺序执行。根据指令含义,可以容易算出上述最终结果。
-
基于MIPS指令集的32位CPU设计与VHDL实现
2021-02-21 03:31:00基于MIPS指令集的32位CPU设计与VHDL实现基于MIPS指令集的32位CPU设计与VHDL实现基于MIPS指令集的32位CPU设计与VHDL实现基于MIPS指令集的32位CPU设计与VHDL实现基于MIPS指令集的32位CPU设计与VHDL实现基于MIPS指令集... -
FPGA单周期MIPS指令集CPU
2018-07-07 21:14:43这是一个基于MIPS指令集的单周期CPU涉及代码,设计思路和通路图均在博客中,欢迎阅读 -
MIPS指令集的实现
2016-05-12 11:38:20本代码对计算机体系结构mips介指令集的实现有较大帮助 -
MIPS处理器 MIPS指令集(上)
2020-12-21 14:05:57引言MIPS指令集有固定的MIPS指令格式和MIPS指令类型,还有固定的MIPS寄存器,它们是了解MIPS指令必不可少的前提。其中,寄存器是MIPS处理器高效的临时存储工具,其存取速度极快,共有固定的32个,自0-31进行编号,需...引言
MIPS指令集有固定的MIPS指令格式和MIPS指令类型,还有固定的MIPS寄存器,它们是了解MIPS指令必不可少的前提。
其中,寄存器是MIPS处理器高效的临时存储工具,其存取速度极快,共有固定的32个,自0-31进行编号,需5位二进制数索引,每个寄存器存储32位数据。
MIPS指令格式
MIPS指令集有三种指令格式:R型指令,I型指令,J型指令
R型指令
Op:指令操作码
Rs:第一个源操作数寄存器号,参与运算使用
Rt:第二个源操作数寄存器号,参与运算使用
Rd:目的操作数寄存器号,保存结果使用
Shamt:位偏移量,仅在位移指令使用,在此直接置0
Func:函数,用于选择Op操作中的具体函数,如运算操作中的加法函数
I型指令
Op:指令操作码
Rs:第一个源操作数寄存器号,参与运算使用
Rt:第二个源操作数寄存器号,参与运算使用
16位立即数:作为数据,参与运算使用
J型指令
Op:指令操作码
26位地址数:作为地址,参与寻址使用
MIPS指令类型
运算指令
算术运算:加法,减法
逻辑运算:或,与,或非,左移,右移
分支指令
条件跳转:相等,不相等,小于
无条件跳转:直接跳转
数据传送指令
存字指令:存入数据
取字指令:取出数据
注:具体指令后续给出,上面只是举例说明
MIPS寄存器
使用寄存器表示时,用寄存器号或者寄存器名,如 $0 或者 $zero
-
MIPS指令集和汇编
2021-10-08 12:38:01MIPS指令集和汇编 一、寄存器与内存 1.1 字节与字 关于对字(word)的理解,我又有了新的认识,word是一种操作单位,而且是最常见的操作单位(不是最小的),内存的地址是用一个字(32位二进制数)来表示的,一条... -
基于MIPS指令集的单周期处理器设计
2020-11-17 13:33:38基于MIPS指令集的单周期处理器设计 一、项目概述 设计题目 设数组存有8个任意字符,将其按顺序拼接得到一个双字(64位),对此双字进行循环左移4位。计算新得到的8个字符中,每个字符中1的个数,并对应存储成新的... -
(计算机体系结构)MIPS指令集结构
2019-10-09 14:01:49目录MIPS指令集结构MIPS指令集结构:寻址方式MIPS指令集结构:指令格式MPIS指令集结构:操作类型MIPS指令集结构:ALU操作MIPS指令集结构:转移操作MIPS指令集结构:浮点操作 MIPS指令集结构 MIPS指令集结构:寻址... -
MIPS指令集 指令的介绍
2020-11-08 17:40:19目录 https://blog.csdn.net/weixin_45792450/article/details/109314693 运算指令 数据传送指令 分支指令 跳转指令 附表 -
PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
2021-01-20 05:07:19Findargs从PPC和MIPS指令集的函数调用特点出发,利用函数调用关系和参数传递分析,识别函数参数的个数,为函数原型的恢复提供帮助。为了评估Findargs的识别效果,选取大型的二进制文件进行了测试,并与radare2进行了... -
MIPS指令集.docx
2019-05-27 11:32:26MIPS指令集word文档,MIPS(Million Instructions Per Second):单字长定点指令平均执行速度 Million Instructions Per Second的缩写,每秒处理的百万级的机器语言指令数。这是衡量CPU速度的一个指标。像是一个Intel... -
cache-simulator:用于MIPS指令集体系结构的处理器高速缓存模拟器
2021-05-02 19:51:16该程序为MIPS指令集体系结构模拟了处理器缓存。 它可以模拟所有三种基本缓存方案:直接映射, n路集关联和完全关联。 该程序必须从命令行运行,并且需要Python 3.4+才能运行。 执行程序将运行模拟并打印ASCII表,... -
《初学计算机组成原理之MIPS指令集及汇编》
2022-03-31 10:37:23MIPS指令集及汇编 文章目录MIPS指令集及汇编前言一、从指令讲起(1)寄存器(2)指令的表示R型格式(register format)I型格式(Immediate format)J型格式(Jump format)二、MIPS汇编语言应用举例1.赋值语句2.决策... -
自制cpu处理器 MIPS指令集 五级流水 带溢出 不带乘除
2019-04-18 16:30:51与本人对应博客内容一致,需要的可以下载,测试代码在文件中存在,可以直接添加在vivado中运行,欢迎下载