电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
创作
电子发烧友网>电子资料下载>可编程逻辑>计算机原理基础课:组合电路和时序电路资料下载

计算机原理基础课:组合电路和时序电路资料下载

2021-04-14 | pdf | 184.66KB | 次下载 | 2积分

资料介绍

这个题目是我临时想的,不知道是否准确,一直想写一个类似的东西,希望能够引起童鞋们关注硬件并喜欢上硬件。 我是文科出生,研究生阶段才转向计算机,中间有很长一段时间都只做软件理论相关研究和一些具体的软件项目,包括编译器、电力系统监控器、软件测试工具研发等;直到2009年,才开始陆陆续续接触一些硬件项目,说是硬件项目,其实主要是一些嵌入式的项目,如世界杯前做的3G转Wifi和自己玩的一些小车和传感器等。 在做嵌入式项目之前,压根就没接触过硬件方面的开发知识,难度可想而知,什么叫编码器、什么叫译码器、怎么做分频、怎么做倍频、怎么做A/D转换、D/A等等,一系列的问题迎面而来。为了完成项目,只能硬着头皮上,从最基础的数字逻辑开始看起,从二进制、卡诺图入手,逐渐深入到组合电路和时序电路,再结合一本叫做《计算机组成与设计-硬件/软件接口》,才逐渐深入明白我们做的编译器后端的具体工作原理,在此基础上对软件的各种性能问题有了更深刻的认识。 组合电路和时序电路是计算机原理的基础课,组合电路描述的是单一的函数功能,函数输出只与当前的函数输入相关;时序电路则引入了时间维度,时序电路在通电的情况下,能够保持状态,电路的输出不仅与当前的输入有关,而且与前一时刻的电路状态相关,如我们个人PC中的内存和CPU中的寄存器,均为时序电路。 说了这么多,我们学习的组合电路和时序电路在计算机中又是怎么一回事呢?为了便于理解,下面以一个大家都能接受的C语言程序开始,从上层向下层开始解释。 void main(){ int a = 3, b = 5; int sum = a b; } 这个例子大家都能明白,main函数要做的事情就是实现两个数的加法操作。这是我们人类的思维方式,但是计算机并不认识,如何让计算机理解呢?于是,我们需要将上面这个程序翻译成机器能理解的模样,这时候就需要借助编译器(如常见的gcc、msc等)将上面的程序翻译成MIPS指令(不同的CPU有不同的指令集,包括X86指令集、MIPS指令集、Sparc指令集等,我们在这里用MIPS指令集,咱们的龙芯也是采用MIPS指令集),如下所示: #下面的每条汇编代码对应一个二进制 addi $t0, 0, 3 # a = 0 3, a保存在$t0寄存器中, 对应的二进制代码为:0010 00** **** **** **** **** **** ****(这里的星号*表示二进制,这里暂时不关心) addi $t1, 0, 5 # b = 0 5, b保存在$t1寄存器中 addi $t2, $t1, $t0 # sum = a + b, sum保存在$t2寄存器中 到这里,大家一定还在疑惑,不是说要翻译成二进制代码吗?怎么是MIPS汇编语言?对,就是汇编语言,这个汇编语言中的每一条指令就对应一条二进制代码,汇编的方式更容易让人理解。 现在我们得到了计算机可以理解的MIPS指令(可以想象成可执行程序)了,接下来的问题是如何执行MIPS指令。 要执行程序,首先必须将可执行程序文件(从外设)加载到内存。可执行文件加载到内存时,操作系统会为每个可执行程序在内存中分配四个区: 1 代码区。也就是前面的到的汇编代码所对应的二进制码 2 全局数据区。全局变量,静态变量放在这个区 3 堆区。表示在程序执行过程中,动态申请的空间在这个区,如C语言中的malloc, free操作均是针对此区中的对象执行申请或释放操作 4 栈区。函数运行时,局部变量的保存区域。 我们重点关注代码区和栈区,初始时,其分布如下图所示: 代码区-1.png 其中PC(Program Counter)是程序计数器(是CPU中的一个寄存器,具有数据存储功能),即用来指示下一个即将执行的指令的地址,本例中,进入main函数后,即将执行的第一条指令是a = 3,其地址为:0X FF FF FF 00, 因此PC指向其对应的汇编代码的地址。 CPU根据PC的的值,从指定地址0X FF FF FF 00处获取指令,然后解析指令,并执行指令(即执行a=3)。 当a = 0执行完毕后,PC执行操作:PC = PC + 4,PC指向0X FF FF FF 04,即b = 5的指令的地址。此时,栈区的状态为: 栈区-1.png 接着,CPU根据PC的的值,从指定地址0X FF FF FF 04处获取指令,然后解析指令,并执行指令(即执行b=5)。当b=5执行完毕后,PC执行操作:PC = PC + 4,PC指向0X FF FF FF 08,即sum=a+b的指令的地址。此时,栈区的状态为: 栈区-2.png 然后,CPU根据PC的的值,从指定地址0X FF FF FF 08处获取指令,然后解析指令,并执行指令(即执行sum=a+b)。当sum=a+b执行完毕后,PC执行操作:PC = PC + 4,PC指向0X FF FF FF 12(因为,指令已经执行完毕,这里应该提示要从main函数返回)。此时,栈区的状态为: 栈区-3.png 至此为止,main函数内部的流程基本上陈述完了(关于函数间调用,相对复杂,计算机组成中会详细讲解),但如何实现这些步骤呢,其中的关键问题包括如下: 问题: 1、知道内存地址,如何定位到那个地址???答案:地址译码器 2、获取到a=3对应的指令后,如何知道是做a=0 3的操作???答案:解析指令,指令译码器 3、PC寄存器如何保存值?如何做加4操作?答案:计数器(寄存器讲解) 作者:CodingTech 来源: (mbbeetchina)
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1电子电路原理第七版PDF电子教材免费下载
  2. 0.00 MB  |  1491次下载  |  免费
  3. 2单片机典型实例介绍
  4. 18.19 MB  |  95次下载  |  1 积分
  5. 3S7-200PLC编程实例详细资料
  6. 1.17 MB  |  27次下载  |  1 积分
  7. 4笔记本电脑主板的元件识别和讲解说明
  8. 4.28 MB  |  18次下载  |  4 积分
  9. 5开关电源原理及各功能电路详解
  10. 0.38 MB  |  11次下载  |  免费
  11. 6100W短波放大电路图
  12. 0.05 MB  |  4次下载  |  3 积分
  13. 7基于单片机和 SG3525的程控开关电源设计
  14. 0.23 MB  |  4次下载  |  免费
  15. 8基于AT89C2051/4051单片机编程器的实验
  16. 0.11 MB  |  4次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234313次下载  |  免费
  3. 2PADS 9.0 2009最新版 -下载
  4. 0.00 MB  |  66304次下载  |  免费
  5. 3protel99下载protel99软件下载(中文版)
  6. 0.00 MB  |  51209次下载  |  免费
  7. 4LabView 8.0 专业版下载 (3CD完整版)
  8. 0.00 MB  |  51043次下载  |  免费
  9. 5555集成电路应用800例(新编版)
  10. 0.00 MB  |  33562次下载  |  免费
  11. 6接口电路图大全
  12. 未知  |  30320次下载  |  免费
  13. 7Multisim 10下载Multisim 10 中文版
  14. 0.00 MB  |  28588次下载  |  免费
  15. 8开关电源设计实例指南
  16. 未知  |  21539次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935053次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537793次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234313次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191183次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183277次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138039次下载  |  免费