龙芯杯学习笔记之计算机组成和设计(硬件/软件接口)
另一篇学习笔记的地址——(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.无符号数的乘法——直接用两个源操作数相乘,他们乘法的结果就是最终结果的补码(源码)
龙芯杯学习笔记之计算机组成和设计(硬件/软件接口)相关推荐
- 计算机组成与设计硬件/软件接口 (MIPS版)
买了一本<计算机组成与设计硬件/软件接口(MIPS版)>,非科班出身的我,从事计算机行业已经8年了,却对计算机的基础什么也不专业.有点惭愧,因为对时间的流逝而感到遗憾!行了,但有言说,多无 ...
- 计算机组成与设计 硬件/软件接口 Risc-v 版
第一章 计算机抽象及相关技术 1.1 引言 1.1.1 传统的计算机应用分类及其特点 个人计算机(Personal Computer, PC) 通用,各种软件;受成本.性能权衡 服务器(Sever C ...
- 【计算机组成与设计 硬件/软件接口-2】MIPS指令集架构
指令:计算机的语言 引言 所谓指令集,指的就是计算机的全部指令,这章节将以MIPS指令集作为学习对象,如果是x86指令集,还请参考<深入理解计算机系统>.MIPS指令集在嵌入式芯片市场占有 ...
- 计算机硬件和软件英语,计算机组成与设计:硬件/软件接口(英文版 原书第5版 ARM版)...
本书采用ARMv8-A体系结构, 介绍当前硬件技术的基本原理.汇编语言.计算机算术.流水线.内存层次结构和I/O.本书更加关注后PC时代发生的变革,通过实例.练习等详细介绍*新涌现的移动计算和云计算, ...
- 计算机组成与设计英文版在线,计算机组成与设计(硬件软件接口英文版原书第5版RISC-V版)/经典原版书库...
目录 CHAPTERS 1 Computer Abstractions and Technology 1.1 Introduction 1.2 Eight Great Ideas in Compute ...
- 【计算机组成与设计:软件、硬件接口(1)】计算机概要与技术
文章目录 一:引言 二:8个伟大思想 三: 程序概念入门 四:硬件概念入门 五: 处理器和存储器 六:性能 七:功耗 八:单处理器→多处理器 九:Intel Core i7实例 十:谬误与陷阱 十一: ...
- “龙芯杯”——全国大学生计算机系统能力培养大赛
芯青春--2021年"龙芯杯"大赛开始报名 从2017年开始,"全国大学生计算机系统能力培养大赛"--"龙芯杯"已成功举办四届,涌现了大批的 ...
- 哈工大深圳计算机水平怎么样,赞!哈工大(深圳)学子在第四届“龙芯杯”全国大学生计算机系统能力培养大赛中获多个奖项...
[计算机科学与技术学院宣](李程浩/文.图)近日,第四届"龙芯杯"全国大学生计算机系统能力培养大赛颁奖典礼在南京举行,哈工大(深圳)计算机科学与技术学院学子获得大赛多个奖项.计算机 ...
- 武汉理工大龙芯计算机学院2000级,信息学院学生团队获第四届龙芯杯计算机系统能力培养大赛三等奖...
9月8日,第四届"龙芯杯"全国大学生计算机系统能力培养大赛全国总决赛落下帷幕,经过激烈角逐,由信息科学与工程学院王凯老师和孔祥玉老师共同指导,蔡雨晴.张祯.王艳艳三位同学组成的参赛 ...
最新文章
- Mybatis 针对ORACLE和MYSQL的批量插入与多参数批量删除
- arduino定时器控制舵机_Arduino学习经验(一)之解决舵机库和pwm输出冲突
- [导入]关于谭浩强[上]
- UNIX环境高级编程——Linux终端设备详解
- java海滩上有一,Java猴子分桃问题--三种算法
- 使用frp进行内网穿透的实例
- 生产数据库更新忙,没有超时
- 差点无缘Offer!java开发和运行环境实验报告
- 简单python脚本实例-python常用运维脚本实例
- 为什么要用C语言实现面向对象
- iOS并发编程(GCD)学习笔记
- android 类似按键精灵脚本_android软件。按键精灵或者脚本精灵都可以,录制脚本可以设置播放次数的最好了。...
- 如何输入多组字符串c语言,求教大侠:如何输入一组字符串
- 什么是测试开发工程师
- gVim配色和字体选择
- android root统计,《全球安卓手机 Root 数据报告》:学生党竟然是Root的骨灰级爱好者?...
- 2018 06 01 第一次博客 自然语言处理
- [JZOJ4949]仙人球
- 网络对抗技术 实验二
- PPT如何制作形状动画?