考点概述:1.指令设计原则;2.RISC、CISC;3.寻址方式(重点);4.子函数调用;5.链接。

存储程序概念:多种类型的指令和数据均以数字形式存储于存储器中。

硬件设计四条基本原则

1.简单源于规整

2.越小越快

3.加速大概率事件

4.优秀的设计需要适宜的折中方案

RISC与CISC的差异

CISC即“复杂指令集”,从无到有,为新增功能设计新的指令。

RISC即“精简指令集”,用少数指令的组合来实现新增的功能。(等长规整、高频指令、积木模式)兼容性差

在指令系统上,CISC指令系统更加丰富,在处理特殊任务时效率更高;且RISC汇编语言程序代码规模庞大,严重依赖于编译器;但RISC在中断时可以在一条指令执行的适当位置响应中断,并且单元电路更少,功耗低。

计算机硬件操作数

MPIS算术运算指令操作数必须来自寄存器,MIPS体系结构中寄存器大小为32位,MIPS有32个寄存器。

字(WORD):计算机中的基本访问单位,通常是32位一组,在MIPS体系结构中与寄存器大小相同。

$s0~$s7寄存器用于保存变量,而$t0~$t9用于保存编译后所需的临时寄存器。

数据传送指令:在存储器和寄存器之间移动数据的命令。

因为MIPS是按字节编址的,所以字的起始地址必须是4的倍数。

基址:数组的起始地址,存放基址的寄存器就成为基址寄存器;偏移量:数据传送指令中的常量。

常数/立即数操作数:存储在存储器中,根据原则1设计addi指令;并且没有立即数的减法,编译器负责将addi转化成“subi”(取负)。

$zero寄存器恒置为0。

符号拓展:将最高有效位复制填充新的高位上。

计算机中指令的表示

$s0~$s7对应reg16~23,$t0~$t7对应reg8~15,$t8、9对应reg24、25。

机器语言:指令的数字形式,并且这样的指令序列成为机器码。

MIPS中的R型指令

op:指令的基本操作,操作码(opcode)

rs:第一个源操作数寄存器

rt:第二个源操作数寄存器

rd:用于存放操作结果的目的寄存器

shamt:位移量

funt:功能,funtion code

MIPS中的I型指令

MIPS中的J型指令

存储程序

1.指令用数的形式表示。

2.和数据一样,程序存储在存储器中,并且可以读写

指令分类

运算类指令

数学运算、逻辑运算

add、sub、addi;sll、srl、and、andi、or、ori、nor.

控制类指令

有/无条件跳转

beq reg1,reg2,Lbne reg1,reg2,Lj Exit

为什么没有blt、bge这类指令?硬件实现的电路复杂,速度慢。

基本块:没有分支(可能出现在末尾)并且没有分支目标/标签(可能出现在开始)的指令序列。自己递归调用自己不是基本块

slt 小于则置位 R型
slti I型

函数

  1. 将参数放在过程可以访问的位置
  2. 将控制转交给过程
  3. 获得过程所需的存储资源
  4. 执行需要的任务
  5. 将结果的值放在调用程序可以访问的位置
  6. 将控制返回初始点

$a0~$a3:用于传递参数的4个参数寄存器

$v0~$v1:用于返回值的两个值寄存器

$ra:用于返回起始点的返回地址寄存器

跳转和链接指令

jal ProcedureAddress 跳转到某个地址同时将下一条指令的地址保存到$ra

寄存器跳转指令

jr $ra

程序计数器:PC,包含在程序中正在被执行指令地址的寄存器。jal指令实际上将PC+4保存在$ra中,从而链接指向下一条指令。

在每次寄存器进行保存或恢复时,栈指针($sp)以字为单位进行调整。栈的增长是按照地址从高到低的顺序进行的,意味着压栈时栈指针的值减小;出栈时栈指针的值增大。

叶过程:不调用其他过程的过程

调用者将所有调用后还需要的参数寄存器($a0~3)和临时寄存器($t0~9)压栈,被调用者将返回地址$ra和被调用者使用的保存寄存器($s0~7)都压栈。

$gp全局指针:指向静态数据区的保留寄存器

32位立即数和寻址

32位立即数如何存储到寄存器?将大的常数分解为若干小的常数,利用lui设置高位,ori/addi设置低位,从而合并到一个寄存器中。

bne等条件跳转是按相对地址计算的
j、jr、jal无条件跳转以及程序跳转和返回的地址是按绝对地址计算的

PC相对寻址:将PC和指令中的常数相加作为寻址结果(实际是用PC+4,即下一条指令的地址)

因为MIPS指令都是四字节长,所以PC相对寻址时所加的地址不是字节地址而是字地址,所以16位的字地址实际跳转范围是18位的字节地址范围。

地址拼接:MIPS跳转指令仅仅代替PC的低28位,高4位保持不变。

(必考点)寻址模式:

  1. 立即数寻址
  2. 寄存器寻址
  3. 基址寻址
  4. PC相对寻址(beq,bne)
  5. 伪直接寻址 (j、jr、jal)

条件跳转距离太远怎么办?编译器处理,插入一个跳转到分支目标的无条件跳转。并将条件取反以便于由分支决定是否跳过该无条件跳转指令。

链接

伪指令:汇编语言指令的一个变种,简化了程序的转化和编程,通常被看作一条汇编指令。机器读不懂汇编指令,依赖汇编器转化成机器指令。MIPS汇编器使用十六进制,主要任务是将汇编成机器语言,将汇编语言程序转化成为目标文件,它包括机器语言指令、数据和指令正确放入内存所需要的信息。

符号表:用来匹配标记名和指令所在内存地址的列表。

链接器:是一个系统程序,把各个独立汇编的机器语言程序组合起来并且解决所以未定义的标记,最后生成可执行文件。

工作步骤:

  1. 将代码和数据模块象征性放入内存
  2. 决定数据和指令标签的地址
  3. 修补内部和外部的引用

核心:重新运算地址,重定位

静态链接发生在形成可执行程序前,即编译之后的链接阶段,此时目标文件会被导入可执行程序中,即目标文件和可执行程序合并为一个文件

动态链接发生在形成可执行程序后,即程序运行时,此时程序会根据需要从动态链接库中导入相应的目标文件,注意动态链接库并不作为程序的一部分,但每个动态链接的程序都需要一个动态链接库(DLL,在程序执行过程中才被链接的库例程)

可以通过晚链接方式链接动态链接库。

加载器:把目标程序装载到内存中以准备运行的系统程序

  1. 读取可执行文件头来确定代码段和数据段的大小
  2. 为正文和数据创建一个足够大的地址空间
  3. 将可执行文件中的指令和数据复制到内存
  4. 将主程序的参数复制到栈顶
  5. 初始化机器寄存器,将栈指针指向第一个空位置
  6. 跳转到启动历程,将参数复制到参数寄存器并调用程序的main函数

【计组复习(二)指令】相关推荐

  1. 计组复习(二):单周期数据通路与控制信号

    目录 前言 单周期数据通路 算数逻辑指令(R 型指令) 取指令阶段 译码阶段 执行阶段 内存访问阶段 写回阶段 下一条指令 内存访问指令 分支跳转指令 总结(重要⚠) 前言 昨天复(yu)习了:计组复 ...

  2. 计算机各个部件配合完成加减乘除(计组学习二)

    大家好,我是贺贺. 计算机组成原理系列 计算机的五大组成部分(计组学习一) 计算机各个部件配合完成加减乘除(计组学习二) 预热一下 当我们了解了计算机的五大组成部分后,下面我来聊聊计算机的各个部件是怎 ...

  3. 计组复习(四):cache,虚拟内存,页表与TLB

    目录 前言 cache高速缓存 直接映射 全相连映射 组相连映射 多级 cache 的 CPI 计算 指令缓存与数据缓存 虚拟内存(重要⚠) 页表 缺页 替换 TLB 例题(重要⚠) FastMath ...

  4. 计组复习-cache

    Cache的复习 Cache,又名高速缓存器,是为了协调CPU和主存的速度而出现的一种高速的,小的存储器. Cache主要由两部分组成,一部分是一个存储器,另一部分是一个地址变换与映射表,这个映射表完 ...

  5. 计组复习(一):乘法器,除法器与浮点加法器

    目录 前言 乘法器 优化乘法器 除法器 优化除法器 浮点加法器(重要⚠) 对阶阶段 加法阶段 规格化阶段 舍入阶段 浮点加法小结 前言 zsbd Orz 乘法器 普通乘法器模拟竖式乘法的计算过程. 每 ...

  6. 计算机的五大组成部分(计组学习一)

    大家好,我是贺贺,一个爱唱歌但是五音不全的程序员 计算机组成原理系列 计算机的五大组成部分(计组学习一) 计算机各个部件配合完成加减乘除(计组学习二) 计算机的故事 在开始啃计算机组成原理(下文简称计 ...

  7. 大二学科不挂科 速冲方法推荐(数据结构+计组+操作系统+算法+数据库+计网)

    文章目录 前引 学科速成总结 1.数据结构 2.计算机组成原理 3.操作系统 4.数据库系统概论 5.算法设计与分析 结束语 前引 这段时间本来是紧锣密鼓的在准备面试 原本以为自己已经学过的科目 考试 ...

  8. 计组期末复习---个人版

    (一)计算机系统概论 1.1计算机分类与发展历史 分类:电子模拟计算机和电子数字计算机 电子模拟计算机:数值由连续量来表示,运算过程是连续的 电子数字计算机:按位运算,并且不是连续地跳动运算 专用计算 ...

  9. 计组期末复习之第七章:输入输出系统

    计组第七章:输入输出系统 输入输出设备 完成输入输出的设备 作为外部存储器的设备 7.1 输入输出控制方式 程序查询方式 CPU与外围设备的数据交换完全依赖于计算机的程序控制 信息交换之前 CPU要设 ...

最新文章

  1. Java生成xlsx格式的excel文件
  2. 小波的秘密5_多分辨率分析和连续小波变换2
  3. 关于Apache虚拟主机的设置
  4. RabbitMq的学习(一):VirtualHost
  5. 文件读取 xxe_漏洞笔记|记一次与XXE漏洞的爱恨纠缠
  6. SAP Commerce Cloud 的 build 过程
  7. 剖析大数据平台的数据采集
  8. .NET Core前后端分离快速开发框架(Core.3.1+AntdVue)
  9. 动态数据交换 python_如何用 Python 和 Streamlit 做交互式数据分析产品?
  10. HDU 4383 To The Moon 解题报告
  11. 夜读丨72名研究生被清退:孩子,你前半生偷的懒,后半生得拼命还
  12. 学习笔记25_MVC前台API
  13. Spring之动态注册bean
  14. 利用python进行数据分析书籍_利用Python进行数据分析 (O'Reilly精品图书系列) 内省...
  15. 六张图了解Python的赋值、浅复制、深复制
  16. android多线程网络通信
  17. Matlab画天球坐标图,知道方位角和高度角
  18. zyt-python
  19. Python 选课系统
  20. 鲜檬“0元旅拍”出圈,婚纱摄影洗牌“加速”

热门文章

  1. 最小生成树-Prime
  2. 什么是RUP,XP,敏捷过程
  3. 如何使用wps office word软件做大字体标示语,比如“禁止入内”
  4. java如何读取word文档内容并修改指定内容文本颜色
  5. Merlion应用:2. Models(forecast)
  6. python 2到100的素数_python输出2到100之间的素数
  7. 余额宝显示服务器出现错误,余额宝半天不显收益 急坏一大批“财迷”
  8. 英飞凌单片机知乎_知乎日报
  9. chatGPT,GPT-3,GPT-3.5哪个比较厉害
  10. ESP32设备驱动-TEMT6000环境光传感器驱动