指令

本文详细介绍了计算机指令集,特别是MIPS架构,包括指令集的存在位置、分类,以及CPU工作原理。讨论了MIPS的指令类型、操作数、寻址方式和对过程的支持,还涵盖了从编译器到加载器的程序执行流程。
摘要由CSDN通过智能技术生成

引言

控制计算机需要使用计算机语言,语言的基本单词称为指令,一台计算机的全部指令称为计算机指令集

所有计算机都是基于基本原理相似的硬件技术所构建的,另一面是因为所有计算机都必须提供一些基本操作。此外,计算机设计者都有一个共同的目标:找到一种语言,可方便硬件和编译器的设计,且性能最佳,同时使成本和功耗最低。

指令集存在什么地方?

CPU指令集是在CPU设计时固化在里面的"硬程序",整合在CPU的逻辑电路中。

如果把CPU看成是一个人,那么指令集就是交流的语言。如果要和CPU交流则必须使用它会的语言。

也可以这么理解:

把CPU看做是日常生活中的工具,指令集就是使用这个工具方法。但这个方法不存在任何地方(方法不能存储的),方法只在工具说明书中"说明"了

指令集架构的分类

CISC(Complex Instruction Set Computer 复杂指令集计算机):CISC每个指令可执行若干低阶操作,从内存读取、存储和计算操作,全部集中于单一指令。简单理解就是一个指令能干很多事,RISC指令做相同的操作需要多条指令。

RISC (Reduced Instruction Set Computer 精简指令集计算机): 起源于MIPS主机,具有设计更简单,设计周期更短等优点。

复杂和精简

这里的“复杂”和“精简”是指指令上的,即功能精简(一条指令只干极少的事),功能复杂(一条指令能做很多事)

机器周期

大多数计算机处理器都会不断地重复三个基本步骤。每个机器周期内会执行一条机器指令。一个现代的计算机处理器每秒钟运行数百万次机器周期。
一条机器指令是由一串对应着处理器基本操作的二进制码组成的,在不同的处理器架构中,机器周期的组成也不相同,但他们的基本行为都包含下面三个主要步骤:

  • 从内存中读取指令:指令存放在内存中,PC (Program Counter) 存放了指令在内存中的地址
  • PC=PC+4:让PC指向下一条指令所在的地址
  • 执行所得到的指令

时钟周期、机器周期和指令周期

时钟周期: 也称为振荡周期,定义为时钟脉冲的倒数,是计算机中最基本的、最小的时间单位。

机器周期: 常把一条指令的执行过程划分为若干个阶段,每完成一个阶段所需要的时间称为机器周期。

指令周期: 执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需要的机器周期也不同。

从时间上来分区分: 指令周期 > 机器周期 > 时钟周期

硬件设计原则

  1. 简单源于规整: 比如加法指令,加法指令只有三个操作数,每个指令有且仅有三个操作数。操作个数的可变将给硬件设计带来更大的复杂性
  2. 越小越快: 比如寄存器非常小,但速度非常快
  3. 优秀的设计需要适应的折中方案: MIPS的所有指令长度相同,但指令的格式不一样(分为了R,I 类型),这是一种折中的体现(长度相同,指令格式相同,MIPS选择了前者)

CPU工作原理

在这里插入图片描述

图片取自:CPU工作原理

MIPS架构

介绍

英语:MIPS architecture,为Microprocessor without Interlocked Pipeline Stages的缩写,亦为Millions of Instructions Per Second的头字语

MIPS 是一种采用精简指令集(RISC) 的处理器架构

MIPS操作数

名字 示例 注释
32个寄存器 $0 $1 寄存器用于数据的快速存取。MIPS中只能对存放在寄存器中的数据只需算数操作
$2^{30} $ 个存储字 Memory[0], Memory[4] … 存储器只能通过数据传输指令访问。MIPS使用字节编址,所以连续的字地址相差4.存储器用于保存数据结构、数组和溢出的寄存器

寄存器

  • 总共有32个通用寄存器
  • 在汇编中,寄存器由$符开头
  • 寄存器有两种表示方法一个是使用REGISTER ($ 0) 一个是使用 NAME ($zero)
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 临时寄存器(temp)
$16-$23 $s0-$s7 保存的(或如果用,需要SAVE/RESTORE的)(saved)
$24-$25 $t8-$t9 临时寄存器(temp) 为操作系统/异常处理保留,至少要预留一个
$28 $gp 全局指针(Global Pointer)
$29 $sp 堆栈指针(Stack Pointer)
$30 $fp 帧指针(Frame Pointer)
$31 $ra 返回地址(return address)
  1. $1, 保留,可以用于拆散和重装大常数
  2. $31 , 使用jar address跳转到某个地址(比如过程地址)时把下一条指令地址放到$ra 中。当过程执行完毕使用jr $ra 返回

指令类型

R型指令: 操作寄存器

指令格式

在这里插入图片描述

  • op: (Operation Code ) 操作码
  • rs: (Source Register): 第一个来源寄存器
  • rt: ( Target Register): 第二个来源寄存器
  • rd: (Destination Register)目的地寄存器
  • sham: Shift amount (number of bits the operation is shifted) 偏移量
  • funct: function (function code) 功能,一般称为功能码,用于指明OP字段中操作的特定变式

包含的指令:

R-type op rs rt rd shamt func
add 000000 rs rt rd 00000 100000 add $1,$2,$3 $1=$2+$3 rd <- rs + rt ;其中rs=$2,rt=$3, rd=$1
addu 000000 rs rt rd 00000 100001 addu $1,$2,$3 $1=$2+$3 rd <- rs + rt ;其中rs=$2,rt=$3, rd=$1,无符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值