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

[架构之路-21]:目标系统 - 软件系统 - 计算机系统架构、计算机指令系统、结构化程序与分层编程。

目录

前言:

第1章 计算机系统

1.1 计算机的出现

1.2 计算机的基本架构

第2章 计算机系统体系结构总结

2.1 计算机组成

2.2 总线与外设

2.3 存储系统

2.4 中央处理器CPU

第3章 计算机硬件概览

3.1 硬件设计概览

3.2 元器件

3.3 原理图

3.4 PCB

3.5 电路板

3.6 可编程硬件器件

第4章 计算机的计算模型与CPU的编程

第5章 计算机中的数据

5.1 计算机内数据表示

5.2 计算机内的数据存储 

5.3 数据的搬移操作

5.4 数据的运算操作

第6章 指令系统

6.1 什么是指令系统

6.2 最主流的指令系统

6.3 X86指令

6.4 ARM指令

6.5 指令的主要操作

6.6 指令的流程控制

6.7 面向二进制指令系统编程的痛苦

第7章 什么是程序与编程

7.1 程序的分类

7.2 什么是可执行的目标程序

7.3 什么是源程序

7.4 什么是程序设计语言/编程语言

7.5 什么是编程?

第8章 结构化程序与分层编程系统

8.1 程序的经典框架:算法+数据结构

8.2 程序的结构化框架

8.3 程序的层次模型

8.4 程序设计的层次模型


前言:

从本章开始,我们开始探讨计算机的软件系统

第1章 计算机系统

1.1 计算机的出现

 

 

 

 

1.2 计算机的基本架构

 

第2章 计算机系统体系结构总结

2.1 计算机组成

2.2 总线与外设

2.3 存储系统

 

2.4 中央处理器CPU

 

(1)数据单元:用于表示和存储数据

(2)运算单元:用于对数据进行运算

(3)控制单元:用于控制指令的执行和数据的搬运

 

 

 

第3章 计算机硬件概览

3.1 硬件设计概览

3.2 元器件

3.3 原理图

3.4 PCB

3.5 电路板

3.6 可编程硬件器件

第4章 计算机的计算模型与CPU的编程

 (1)内存中的二进制程序

  • 通过高级语言,如C/C++,或通过低级语言,如汇编语言,编写的程序,经过编译,连接成二进制的程序中的代码。
  • 把指令代码存放在目标系统的内存中。

(2/3)内存中的数据

  • 通过高级语言,如C/C++,或通过低级语言,如汇编语言,定义的数据,经过编译,连接成二进制的程序中的数据。

(4)处理器的控制单元从内存中获取二进制的CPU指令

(5)处理器的运算单元执行程序,进行数据运算

(6)从内存中获取运算所需要的源数据

(7)再把程序执行、运算的结果数据存放到内存中。

(8)  输入输出IO:从IO的输入接收外部数据,并通过IO的输出数据。

第5章 计算机中的数据

5.1 计算机内数据表示

(1)二进制数据

(2)补码

 

(3)进制

5.2 计算机内的数据存储 

 

(1)在指令中存储数据:立即数

(2)在CPU内部的寄存器中存储数据

 

(3)在内存中存储数据

5.3 数据的搬移操作

5.4 数据的运算操作

第6章 指令系统

6.1 什么是指令系统

如何指导或命令计算机按照计算模型执行一些列的计算呢?这就是计算机的指令系统。

指令系统是指导/指示计算机硬件运行的语言系统,也叫机器语言指令系统是机器所具有的全部指令的集合。

指令系统它是软件和硬件的主要边界,它反映了计算机所拥有的全部基本功能。

从系统结构的角度看,它是系统程序员看到的计算机的主要属性。指令系统表征了计算机的基本功能决定了机器所要求的能力,也决定了指令的格式和机器的结构。

设计指令系统就是要选择计算机系统中的一些基本操作( 包括bootloader、操作系统高级语言中的) 应由硬件实现还是由软件实现,选择某些复杂操作是由一条专用的指令实现, 还是由一串基本指令实现,  然后具体确定指令系统的指令格式、类型、操作以及对操作数的访问方式

6.2 最主流的指令系统

 

6.3 X86指令

 

6.4 ARM指令

 

6.5 指令的主要操作

(1)数据在不同存储位置的搬运与传送

(2)数据的运算

  • 算术运算
  • 逻辑运算
  • 关系运算
  • 位移运算
  • 位运算

6.6 指令的流程控制

(1)程序控制

  • 顺序执行
  • 无条件转移
  • 条件分支
  • 循环控制

(2)CPU控制

  • 执行指令
  • 空操作
  • 暂停
  • 中断

6.7 面向二进制指令系统编程的痛苦

第7章 什么是程序与编程

7.1 程序的分类

(1)目标程序

(2)源程序

7.2 什么是可执行的目标程序

计算机目标程序,简称计算机程序,它是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。程序就是能够完成某种功能的一系列的指令序列

可执行的目标程序是二进制程序,符合CPU 指令系统的规范。

7.3 什么是源程序

源程序程序以某些程序设计语言编写的程序。

源程序是文本程序,符合特定的特定编程语言的规范。

源程序不能执行在硬件CPU上运行,它需要经过经过开发工具编译器进行编译和链接,变成目标程序(二进制程序)才能在硬件CPU上运行。

7.4 什么是程序设计语言/编程语言

计算机编程语言是程序设计的最重要的工具,它是指计算机能够接受和处理的、具有一定语法规则的语言。

从计算机诞生,计算机语言经历了机器语言、汇编语言和高级语言几个阶段。

在所有的程序设计语言中,只有机器语言编制的源程序能够被计算机直接理解和执行,用其它程序设计语言编写的程序都必须利用语言处理程序“翻译”成计算机所能识别的机器语言程序。

(1)机器语言:

机器语言就是计算机的CPU指令,可以直接在CPU上执行。

机器语言是机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言使用绝对地址和绝对操作码。不同的计算机都有各自的机器语言,即指令系统。从使用的角度看,机器语言是最低级的语言。

(2)汇编语言:

汇编语言, 即第二代计算机语言,用一些容易理解和记忆的缩写单词来代替一些特定的指令,例如:用"ADD"代表加法操作指令,"SUB"代表减法操作指令,以及"INC"代表增加1,"DEC"代表减去1,"MOV"代表变量传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。

(3)高级语言:

高级语言又主要是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。编写的程序称之为高级语言的源程序。

高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,易语言,中文版的C语言等等,这些语言的语法、命令格式都不相同。

高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。所以汇编语言适合编写一些对速度和代码长度要求高的程序和直接控制硬件的程序。

高级语言程序“看不见”机器的硬件结构,不能用于编写直接访问机器硬件资源的系统软件或设备控制软件。为此,一些高级语言提供了与汇编语言之间的调用接口。用汇编语言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈来传递参数或参数的地址。

7.5 什么是编程?

编程是编定程序的中文简称,就是让计算机代码解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。

为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。

这种人和计算体系之间交流的过程就是编程。

最常见的编程,是指使用高级编程语言的编程。

第8章 结构化程序与分层编程系统

8.1 程序的经典框架:算法+数据结构

数据结构(structure)是:计算机存储、组织数据的方式。

算法(Algorithm)是:指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

8.2 程序的结构化框架

8.3 程序的层次模型

8.4 程序设计的层次模型

设计一个程序或软件系统,自底向上的方法有:

(1)二进制指令系统

(2)低级编程语言:汇编

(3)高级编程语言:C/C++/Python

(4)标准库:第三方提供的常见的功能

(5)常见的设计模式

(6)特定业务应用的程序框架

(7)特定业务的应用程序

(8)UML图形化语言描述

每个层次,都包含程序的两个重要方面:算法+数据结构

相关文章:

  • acwing算法基础模版分析
  • 数据库-MySQL-基础(7)函数
  • MySQL入门学习笔记(下)
  • 15.4 - 分类树法
  • python容器
  • xilinx FPGA FX2 usb通信模块之上位机发送的数据格式
  • 阿里云对象存储OSS存储照片
  • AES、RSA、DH加密解密
  • 高效的操作符使用剖析
  • CVE-2017-12615 Tomcat任意文件上传漏洞详解
  • 10.2国庆作业(PWM实验)
  • Java开发环境基础配置
  • 基于springboot和ftp实现的网盘文件系统
  • Maven创建聚合项目
  • ASP.NET MVC--视图
  • SegmentFault for Android 3.0 发布
  • 10个确保微服务与容器安全的最佳实践
  • centos安装java运行环境jdk+tomcat
  • const let
  • ECS应用管理最佳实践
  • HTML中设置input等文本框为不可操作
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • javascript 总结(常用工具类的封装)
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Redux 中间件分析
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • tab.js分享及浏览器兼容性问题汇总
  • Vue.js源码(2):初探List Rendering
  • Vue官网教程学习过程中值得记录的一些事情
  • zookeeper系列(七)实战分布式命名服务
  • 编写符合Python风格的对象
  • 订阅Forge Viewer所有的事件
  • 三栏布局总结
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 学习ES6 变量的解构赋值
  • Hibernate主键生成策略及选择
  • Python 之网络式编程
  • ​Spring Boot 分片上传文件
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #Java第九次作业--输入输出流和文件操作
  • (23)Linux的软硬连接
  • (C++17) optional的使用
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十六)Flask之蓝图
  • (四) Graphivz 颜色选择
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转) Android中ViewStub组件使用
  • .net Stream篇(六)
  • .NET 使用 XPath 来读写 XML 文件
  • .net连接oracle数据库
  • .net知识和学习方法系列(二十一)CLR-枚举