手写操作系统(2)——代码是怎么运行的?(中)

简介: 手写操作系统(2)——代码是怎么运行的?

手写操作系统(2)——代码是怎么运行的?(上):https://developer.aliyun.com/article/1508450

加减乘除四则运算

有了以上的逻辑运算门电路,我们来不如考虑如何做加减乘除?为方便回忆,现在把我们已有的门电路工具组再次拿出来!

加法器

首先咱们得明白,计算机中所有的运算其实都是基于二进制(进制的转换之后再讲)的,也就是加法器的输入和输出只有“0”和“1”。


值得注意的是设计逻辑电路时最好的方法是先写真值表,对于一个简单的加法器而言有两个输入(A/B)和一个输出(S)和一个进位(C)。

**简单分析一下,**输入两个1,输出当前位0,进位为1;输入两个0,当前位为0,进位为0;输入一个0一个1,输出当前位0,进位为0。

A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

只看当前位,去看看门电路工具组是不是有点眼熟?异或门!

只看进位,去看看与门是不是有点眼熟!

也就是说加法器可以由异或门和与门构成!如下图所示:

但是现在这个只能称为“半加器”,最多只能计算1+1,如何更进一步,比如1+2,2+2?

这就需要在原本的加法器增加一个进位接口,如下就是“全加器”:

Copy一个百度图片来简化一下上图的结构:


将两个加法器串联在一起,就得到一个可以进行2位(3+3)加法的加法器。

要几位加法就用几个加法器串联,如四位(15+15):


注:上图展示的是串行进位加法器,又称波纹加法器。还有一种超前进位加法器,不再是从右到左一次计算,比前者更快。


参考: https://wenku.baidu.com/view/9de55e1ce53a580217fcfe93.html

减法器

减法器其实是本质还是通过加法器实现的,比如15-15,其实就是15+(-15),这里的-15是所谓的补码,后面再说。

乘法器

加减解决了,乘法怎么弄?

先看看二进制的乘法是怎么计算的,如下:


上图是4位的乘法,先考虑2位的乘法,例如a2a1×b2b1:

为什么输出有四位?因为二位乘法最大就是四位结果!比如11(二进制)乘11(二进制),结果是多少?1001!

结合上图的乘法过程,我们可以利用与门以及加法器来组成乘法器,如下图所示:

乘1?原值。

乘2?由于是二进制,在末尾加0即可。

乘3?先加0,在做一次加法可行。

乘4?加两个0。

除法器

除法器的设计就比较麻烦了,这里不进行展开,有兴趣的同学可以参考以下链接

乘法器除法器的制作——百度文库

https://wenku.baidu.com/view/b30ce26ab84ae45c3b358c25.html

…ok!以上一通分析之后我们得到了加减乘除四则运算的器件了,我们接下来可以进行更高难度的计算了。

比如:

A×B+C

这就需要先保存A×B的结果,在与C相加,等等…保存?话说在计算机内部是用什么方式保存数据的呢

寄存器

这就得讲讲寄存器的相关知识。

由于保存数据的重要性,科学家一直在思考在电路中使用何种方式可以保存数据,比如使某个器件一直输出高电平,那不就是“1”了吗?一直输入低电平,那不就是“0”了吗?而且还要可以自由切换“0”和“1”。

经过一阵鼓捣,科学家们发明了锁存器这个东西,它有什么用?它可以根据输入信号来改变输出状态

锁存器是具有记忆功能(也就是存储功能)的基本单元,最简单的锁存器可以存储一位二进制信息。

它有两个特点:

  • 有两个能稳定保持的状态,分别用来表示逻辑0和逻辑1;
  • 在适当的输入信号下,可以从一种状态变为另一种状态(0-1或1-0);

最简单的S-R锁存器它是由两个“或非”门电路或者“与非”门电路构造出来的:

R、S是锁存器的输入端,前者一般被称为复位(Reset)端,后者为置位(Set)端,Q和Q加一杠是互为相反的输出(你0我1,你1我0)。

注意到这个电路跟之前我们看到的都不一样了,其门电路的输出会作为自身的输入,这种结构被称为反馈电路

手写操作系统(2)——代码是怎么运行的?(下):https://developer.aliyun.com/article/1508460

相关文章
|
2月前
|
算法 搜索推荐 开发工具
探索代码的奥秘:技术感悟与实践探索操作系统的心脏:内核
【5月更文挑战第31天】在数字世界的编织中,每一行代码都承载着创造者的智慧和汗水。本文将带你深入编程的核心,揭示那些隐藏在日常开发实践中的技术真谛。从算法的精妙到系统的架构,我们将一同探讨如何通过技术提升效率,解决问题,并在这个过程中获得个人成长。 【5月更文挑战第31天】本文深入剖析了操作系统的核心组件——内核,探讨了其设计哲学、功能职责以及在现代计算环境中的重要性。通过分析内核的工作原理和它如何与硬件、软件交互,我们将揭示这个隐藏在用户界面背后的力量之源。
|
13天前
|
IDE Oracle Java
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
|
2月前
|
存储 程序员
操作系统的运行机制、中断和异常、系统调用
操作系统的运行机制、中断和异常、系统调用
27 1
|
17天前
|
Linux Shell 程序员
【Linux操作系统】命令的运行原理
【Linux操作系统】命令的运行原理
|
2月前
|
存储 程序员
操作系统(10)----从写程序到程序运行
操作系统(10)----从写程序到程序运行
30 1
|
2月前
|
存储 缓存 程序员
手写操作系统(2)——代码是怎么运行的?(下)
手写操作系统(2)——代码是怎么运行的?
23 1
|
2月前
|
存储 程序员
操作系统(1)----操作系统的运行机制
操作系统(1)----操作系统的运行机制
25 0
|
2月前
|
安全
手写操作系统(2)——代码是怎么运行的?(上)
手写操作系统(2)——代码是怎么运行的?
26 0
|
16天前
|
存储 缓存 安全
Linux基础——冯诺依曼体系结构与操作系统
Linux基础——冯诺依曼体系结构与操作系统
42 1
Linux基础——冯诺依曼体系结构与操作系统
|
12天前
|
Linux 网络安全 虚拟化
Linux操作系统第一章(Linux操作系统的带入,vmware-17虚拟化软件运用,FinalShell远程连接Linux )
Linux操作系统第一章(Linux操作系统的带入,vmware-17虚拟化软件运用,FinalShell远程连接Linux )

热门文章

最新文章