另一篇学习笔记的地址——(13条消息) 龙芯杯学习笔记之自己动手写CPU_qq_33880925的博客-CSDN博客

本篇博客目前尚未写完,看完本篇博客目前已写的内容后(看完第二部分)对MIPS有初步的理解了,就可以去看上面那篇博客


目录

前言

一、一些基本概念

1.CPU是什么?

2.什么是I/O设备?

3.什么是cache?

4.CPU性能的三个衡量尺度

二、计算机的指令

1.指令和指令集

2.MIPS的汇编语言

(1)算术运算指令

(2)寄存器的符号

(3)数据传送指令

(4)一些逻辑运算

(5)条件分支语句

(6)小于则置位

(7)一些关于栈和过程的前置知识

(8)读取字



前言

本文为龙芯杯备赛有关计算机组成原理部分的学习笔记,会长期更新

参考书籍——计算机组成与设计(硬件/软件接口)

一、一些基本概念

1.CPU是什么?

cpu是控制器和运算器的统称。现在计算机一存储器为中心,由输入,输出,存储器,控制器,运算器组成。

2.什么是I/O设备?

I/O是指输入输出设备。

3.什么是cache?

cache是缓存的意思,cache一帮采用SRAM(RAM的一种,静态随机访问存储器的意思)

cache一般用于大型存储器的缓冲。

4.CPU性能的三个衡量尺度

指令数,CPI(单个指令的平均时钟周期),时钟频率

CPU的执行时间=指令数 x CPI / 时钟频率

二、计算机的指令

1.指令和指令集

计算机语言中的基本单词成为指令,计算机全部指令的集合成为指令集

2.MIPS的汇编语言

mips中寄存器是32位的,一共有32个32位寄存器

(1)算术运算指令

每条mips语句只能有三个操作数,其中第一个操作数是result

一行只能有一条mips指令,用#表示注释

add a,b,c  #a=b+csub a,b,c  #a=b-caddi a,b,4  #a=b+4,加立即数

MIPS支持符号数运算

(2)寄存器的符号

变量寄存器:$s0,$s1,...

临时寄存器:$t0,$t1,...

$和取地址符是一样的

(3)数据传送指令

复杂的数据结构例如数组会将变量存在存储器中,使用前需要用数据传送指令将变量从存储器中转移到寄存器

取字:

lw $s1,20($s2)  

#$s1是存放变量的寄存器,$s2是存放存储器首地址的寄存器,即$s2=&A[0]=A,20是变量存储器中的相对于首地址的偏移量,$s2+20是变量A[5]的地址

MIPS是按字节存储的,一个地+的单位是字节,A[5]的实际地址是$s2+5*4,因为存储器中一个存储单元是一个字,MIPS中一个字默认4个字节

存字:

sw $s1,20($s2)   #把寄存器$s1中的变量存到存储器$s2+20中

存数据和取数据是要消耗时间的,提高程序效率的一种方法是尽可能使用寄存器

常数在计算机中没有取的操作,可以用立即数运算,这也就是为什么写代码要用const

(4)一些逻辑运算

右移:

srl $s1,$s2,4  #表示 $s1=$s2>>4

左移:

sll $s1,$s2,4  #表示 $s1=$s2<<4  

按位与:

AND $s1,$s2,$s3

按位或:

OR $s1,$s2,$s3

按位或非:

NOR $s1,$s2,$s3  #当$s3为0时就变成了对$s2按位非,一帮来说$s3可用$zero代替

乘法是可以用逻辑左移来表示

(5)条件分支语句

if else

在mips中

beq $s1,$s2,branch  #当$s1,$s2相等跳转到branch分支bne $s1,$s2,branch  #当$s1,$s2不相等跳转到branch分支j branch  #无条件跳转branch分支

例子:if(a=b) c=d+e;

else c=d-e;

a,b,c,d,e分别在$s0,...,$s4

用mips表示

beq $s0,$s1,thensub $s2,$s3,$s4j Exitthen:add $s2,$s3,$s4Exit:

(6)小于则置位

有符号数

slt $t0,$s1,$s2  #$t0=1 if $s1<$s2 else $t0=0slti $t0,$s1,10  #$t0=1 if $s1<10 else $t0=0

无符号数

sltu和sltiu同理

需要注意计算机中存储数字是用补码

(7)一些关于栈和过程的前置知识

用汇编语言解释栈和函数的过程比较复杂,建议到课本学习

$sp #表示栈指针
$ra #默认存储函数调用者的地址
jal function #调用函数并自动给$ra赋值
jr $ra #函数调用结束回到调用的地址
$v0,$v1 #用来存储返回值
$a0,$a1,$a2,$a3 #用来存储参数

(8)读取字

lb $t0,0($s0)  #读取一个字节放到寄存器
sb $t0,0($s0)  #把寄存器中的一个字节放到存储器中
lh $t0,0($s0)  #读取半个字即16位
sh $t0,0($s0)  #把寄存器中半个字放到存储器中

3.算术运算

1.补码

计算机中数字的存储是以补码的方式进行的,也就是说进行add,sub等算术运算时,输入的数据都是补码而不是源码。

输入-5在计算机中用补码0xffff_fffb表示而不是0x8000_0005表示

补码进行运算后,结果仍然是补码,不过正数的补码与源码相同,负数的补码与源码不同,之间存在一定的转化关系。

补码公式,x是补码,~x是补码逐个位取反,-x表示x的相反数的补码

x+(~x)=-1

2.溢出

所谓的溢出是指两个正数相加得到一个负数,或是说两个负数相加得到一个正数的情况叫做溢出。溢出只会发生在加法和减法当中(计算机里,补码之间的减法必需转化成补码间的加法才能计算,补码的减法无意义)。

3.有符号数和无符号数

1.有符号数

数字的最高位表示符号的数字叫做有符号数,0表示整数,1表示负数

2.无符号数

数字的所有位数都表示大小,恒为非负数,最高位也是表示数字的大小的。有符号数由于默认为整数,所以他的补码就是源码本身

3.有符号数与无符号数的运算

1.有符号数加减法——全部转化为补码的加法后得到最终结果的补码,需要判断是否溢出,如果溢出那么结果无效

2.无符号数的加减法——转化为补码的加法运算,结果不需要判断是否溢出,结果恒有效

3.有符号数的乘法——把两个有符号数全部转换为绝对值的补码,计算出正确结果的绝对值(以补码的形式表示,虽然补码和源码一样),在根据正确结果的符号,对绝对值的补码进行转换,得到正确结果的补码

4.无符号数的乘法——直接用两个源操作数相乘,他们乘法的结果就是最终结果的补码(源码)

龙芯杯学习笔记之计算机组成和设计(硬件/软件接口)相关推荐

  1. 计算机组成与设计硬件/软件接口 (MIPS版)

    买了一本<计算机组成与设计硬件/软件接口(MIPS版)>,非科班出身的我,从事计算机行业已经8年了,却对计算机的基础什么也不专业.有点惭愧,因为对时间的流逝而感到遗憾!行了,但有言说,多无 ...

  2. 计算机组成与设计 硬件/软件接口 Risc-v 版

    第一章 计算机抽象及相关技术 1.1 引言 1.1.1 传统的计算机应用分类及其特点 个人计算机(Personal Computer, PC) 通用,各种软件;受成本.性能权衡 服务器(Sever C ...

  3. 【计算机组成与设计 硬件/软件接口-2】MIPS指令集架构

    指令:计算机的语言 引言 所谓指令集,指的就是计算机的全部指令,这章节将以MIPS指令集作为学习对象,如果是x86指令集,还请参考<深入理解计算机系统>.MIPS指令集在嵌入式芯片市场占有 ...

  4. 计算机硬件和软件英语,计算机组成与设计:硬件/软件接口(英文版 原书第5版 ARM版)...

    本书采用ARMv8-A体系结构, 介绍当前硬件技术的基本原理.汇编语言.计算机算术.流水线.内存层次结构和I/O.本书更加关注后PC时代发生的变革,通过实例.练习等详细介绍*新涌现的移动计算和云计算, ...

  5. 计算机组成与设计英文版在线,计算机组成与设计(硬件软件接口英文版原书第5版RISC-V版)/经典原版书库...

    目录 CHAPTERS 1 Computer Abstractions and Technology 1.1 Introduction 1.2 Eight Great Ideas in Compute ...

  6. 【计算机组成与设计:软件、硬件接口(1)】计算机概要与技术

    文章目录 一:引言 二:8个伟大思想 三: 程序概念入门 四:硬件概念入门 五: 处理器和存储器 六:性能 七:功耗 八:单处理器→多处理器 九:Intel Core i7实例 十:谬误与陷阱 十一: ...

  7. “龙芯杯”——全国大学生计算机系统能力培养大赛

    芯青春--2021年"龙芯杯"大赛开始报名 从2017年开始,"全国大学生计算机系统能力培养大赛"--"龙芯杯"已成功举办四届,涌现了大批的 ...

  8. 哈工大深圳计算机水平怎么样,赞!哈工大(深圳)学子在第四届“龙芯杯”全国大学生计算机系统能力培养大赛中获多个奖项...

    [计算机科学与技术学院宣](李程浩/文.图)近日,第四届"龙芯杯"全国大学生计算机系统能力培养大赛颁奖典礼在南京举行,哈工大(深圳)计算机科学与技术学院学子获得大赛多个奖项.计算机 ...

  9. 武汉理工大龙芯计算机学院2000级,信息学院学生团队获第四届龙芯杯计算机系统能力培养大赛三等奖...

    9月8日,第四届"龙芯杯"全国大学生计算机系统能力培养大赛全国总决赛落下帷幕,经过激烈角逐,由信息科学与工程学院王凯老师和孔祥玉老师共同指导,蔡雨晴.张祯.王艳艳三位同学组成的参赛 ...

最新文章

  1. Mybatis 针对ORACLE和MYSQL的批量插入与多参数批量删除
  2. arduino定时器控制舵机_Arduino学习经验(一)之解决舵机库和pwm输出冲突
  3. [导入]关于谭浩强[上]
  4. UNIX环境高级编程——Linux终端设备详解
  5. java海滩上有一,Java猴子分桃问题--三种算法
  6. 使用frp进行内网穿透的实例
  7. 生产数据库更新忙,没有超时
  8. 差点无缘Offer!java开发和运行环境实验报告
  9. 简单python脚本实例-python常用运维脚本实例
  10. 为什么要用C语言实现面向对象
  11. iOS并发编程(GCD)学习笔记
  12. android 类似按键精灵脚本_android软件。按键精灵或者脚本精灵都可以,录制脚本可以设置播放次数的最好了。...
  13. 如何输入多组字符串c语言,求教大侠:如何输入一组字符串
  14. 什么是测试开发工程师
  15. gVim配色和字体选择
  16. android root统计,《全球安卓手机 Root 数据报告》:学生党竟然是Root的骨灰级爱好者?...
  17. 2018 06 01 第一次博客 自然语言处理
  18. [JZOJ4949]仙人球
  19. 网络对抗技术 实验二
  20. PPT如何制作形状动画?

热门文章

  1. wine的乱码问题解决
  2. 计算机配置认识,硬件配置 认识计算机硬件组成
  3. 堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出
  4. 如何使用ABBYY FineReader 14创建PDF文档
  5. 编译原理 | 第一章课后习题答案
  6. 使用Map 代替Switch语句
  7. shell设置输出信息的颜色
  8. 《告别失控》读书笔记
  9. 自学python 知乎-为什么自学Python看不进去?
  10. 【MOS】OCR/Vote disk 维护操作: (添加/删除/替换/移动) (文档 ID 1674859.1)