当前位置: 首页 > news >正文

计算机是怎么跑起来的(1)

前言

前段时间有人在开发者头条推荐了几本书,其中包括《计算机是怎么跑起来的》《程序是怎么跑起来的》作者是日本的矢泽久雄。

看过之后收获很大,如书中所说很多程序员理解面向对象,精通Java php 等等,但是对于计算机和程序的基本运行原理却知之又

少,也许这就是一个程序员跟一个伟大程序员之间的差距之一吧。

本文将这两本书合二为一,加入自己的发散思维,算是读书笔记,也希望对阅读者能有所帮助,由于作者水平有限,错误不足之处

请指正。

文章没有具体的规划,大致内容以及顺序如下:

     0x00 认识计算机

     0x10 计算机硬件组成是这么简单

     0x20 计算机程序

     0x30 计算机操作系统

     0x40 现代计算机

 

0x00 认识计算机

     0x01 计算机是输入-运算-输出 的机器

      计算机通过I/O设备输入输出,如 鼠标,键盘,计算器的按键,游戏机把手都是输入设备,那么 计算器 和游戏机是不是计算机呢?

        是啊,当然是 绝对是,它有 输入-运算-输出,干嘛不是呢?

               CPU是负责运算的,那么CPU是怎么知道该算加减还是乘除呢?是程序,CPU按照程序的指令做运算

     0x02 程序是指令和数据的集合,怎么把程序发送给CPU,然后CPU又是怎么运算的呢?下面我就画一个超级简化的“CPU”来说明

             在制造这个“CPU”之前,我们只需要提前约定好下面规则

                     5V电压代表 1

                     0V电压代表 0

                     当C指令引脚电压为5V,CPU直接将D数据引脚的电压直接输出到O引脚

                     当C指令引脚电压为0V,CPU将D数据引脚的电压翻转后输出到O引脚

 

上图的”CPU“是我们自己制造的,我们输入不同的程序(指令引脚电压和数据引脚电压),就会得到不同的输出值

罗列得到如下表格:

C指令引脚输入值           D数据引脚输入值            O输出引脚输出值                    备注                     
1(指令为1)00输入程序10-->输出0
1(指令为1)11输入程序11-->输出1
0(指令为0)01输入程序00-->输出1
0(指令为0)10输入程序01-->输出0

 

 

 

 

 

下面我们开始编程:

11 10 00 01  这样CPU依次输出 1 0 1 0,如果接到LED灯上,就是 亮 灭 亮 灭

00 00 11 10  这样CPU依次输出  1 1 1 0 ,如果接到LED灯上,就是 亮 亮 亮 灭

看到这里你应该能理解了,所有的程序,无论是什么高级编程语言 java, php, c , python 最终都会转化成二进制的形式,然后通过高低电压接入CPU输入引脚

CPU计算后,再通过输出引脚输送出来。(真正的CPU复杂的多 有 I/O引脚  地址引脚  数据引脚 控制引脚 等等,不要着急这些我们后面都会了解的清清楚楚)。

    0x03 计算机跟人不同

           计算机的世界里只有高电压和低电压,也就是只有 1 和 0 ,而我们人类世界有1234567890,有赤橙红绿青蓝紫,有乘除,有汉字,这些计算机怎么表示,怎么计算呢?你肯定马上就能回答,用 二进制编码表示,二进制指令计算。

结束

下篇我们就做一个简单的计算机,有内存,有I/O口,有时钟,理解一个计算机到底是怎么运转的。

 

转载于:https://www.cnblogs.com/QQisadog/p/5471609.html

相关文章:

  • Android学习笔记(二)
  • vue-生命周期
  • Flex/AS3/flash player支持屏蔽右键菜单,自定义菜单,并设置相应的菜单事件(示例,图解)...
  • vue-cli脚手架 搭建项目
  • 玩转无线电 -- 温哥华天车 RFID 票务系统
  • 前端常见的linux指令
  • [转]CentOS-6.3安装配置SVN
  • leetcode 205. Isomorphic Strings
  • node的安装
  • Sqlserver2008相关配置问题
  • node 模块简述--内置fs http ---自定义模块
  • ppt 制作海报 导出高分辨率图片
  • 数组常见的方法
  • 数据结构-C语言递归实现树的前中后序遍历
  • 核心动画(Core Animation)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • JAVA SE 6 GC调优笔记
  • JavaScript HTML DOM
  • java第三方包学习之lombok
  • Java方法详解
  • React 快速上手 - 07 前端路由 react-router
  • 开源SQL-on-Hadoop系统一览
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 通信类
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 阿里云API、SDK和CLI应用实践方案
  • ​第20课 在Android Native开发中加入新的C++类
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (4)(4.6) Triducer
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)php投票系统 毕业设计 121500
  • (规划)24届春招和25届暑假实习路线准备规划
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • .Net core 6.0 升8.0
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net core控制台应用程序初识
  • .NET 读取 JSON格式的数据
  • .net 验证控件和javaScript的冲突问题
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .Net程序帮助文档制作
  • .NET文档生成工具ADB使用图文教程
  • @EnableConfigurationProperties注解使用
  • [.net]官方水晶报表的使用以演示下载
  • [BetterExplained]书写是为了更好的思考(转载)
  • [BZOJ1053][HAOI2007]反素数ant
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • [HTML]Web前端开发技术30(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [Invalid postback or callback argument]昨晚调试程序时出现的问题,MARK一下