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

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

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



前言

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

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

一、一些基本概念

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+c

sub a,b,c  #a=b-c

addi 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,then

sub $s2,$s3,$s4

j Exit

then:add $s2,$s3,$s4

Exit:

(6)小于则置位

有符号数

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

slti $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
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这本最畅销的计算机组成书籍经过全面更新,关注现今发生在计算机体系结构领域的革命性变革:从单处理器发展到多核微处理器。此外,出版这本书的ARM版是为了强调嵌入式系统对于全亚洲计算行业的重要性,并采用ARM处理器来讨论实际计算机的指令集和算术运算,因为ARM是用于嵌入式设备的最流行的指令集架构,而全世界每年约销售40亿个嵌入式设备。与前几版一样,本书采用了一个MIPS处理器来展示计算机硬件技术、流水线、存储器层次结构以及I/O等基本功能。此外,本书还包括一些关于x86架构的介绍。   本书主要特点   ·采用ARMv6(ARM11系列)为主要架构来展示指令系统和计算机算术运算的基本功能。   ·覆盖从串行计算到并行计算的革命性变革,新增了关于并行化的一章,并且每章中还有一些强调并行硬件软件主题的小节。   ·新增一个由NVIDIA的首席科学家和架构主管撰写的附录,介绍了现代GPU的出现和重要性,首次详细描述了这个针对可视计算进行了优化的高度并行化、多线程、多核的处理器。   ·描述一种度量多核性能的独特方法——“Roofline model”,自带benchmark测试和分析AMD Opteron X4、Intel Xeon 5000、Sun UltraSPARC T2和 IBM Cell的性能。   ·涵盖了一些关于闪存和虚拟机的新内容。   ·提供了大量富有启发性的练习题,内容达200多页。   ·将AMD Opteron X4和Intel Nehalem作为贯穿本书的实例。   ·用SPEC CPU2006组件更新了所有处理器性能实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值