手写操作系统(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月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
2月前
|
存储 算法 安全
深入理解操作系统:从基础概念到代码实践
【9月更文挑战第23天】本文将带领读者深入探索操作系统的奥秘,从基础概念出发,逐步揭示操作系统的工作原理和设计哲学。我们将通过实际代码示例,展示操作系统如何与硬件交互、管理资源以及提供用户界面。无论你是计算机专业的学生还是对操作系统感兴趣的开发者,这篇文章都将为你打开一扇通往操作系统世界的大门。
66 16
|
6月前
|
算法 搜索推荐 开发工具
探索代码的奥秘:技术感悟与实践探索操作系统的心脏:内核
【5月更文挑战第31天】在数字世界的编织中,每一行代码都承载着创造者的智慧和汗水。本文将带你深入编程的核心,揭示那些隐藏在日常开发实践中的技术真谛。从算法的精妙到系统的架构,我们将一同探讨如何通过技术提升效率,解决问题,并在这个过程中获得个人成长。 【5月更文挑战第31天】本文深入剖析了操作系统的核心组件——内核,探讨了其设计哲学、功能职责以及在现代计算环境中的重要性。通过分析内核的工作原理和它如何与硬件、软件交互,我们将揭示这个隐藏在用户界面背后的力量之源。
|
26天前
|
小程序 iOS开发 MacOS
MacOS环境-手写操作系统-44-运行简单的程序
MacOS环境-手写操作系统-44-运行简单的程序
17 0
|
2月前
|
存储 算法 Unix
探索操作系统:从理论到代码
【9月更文挑战第3天】操作系统是计算机的核心,它管理着硬件和软件之间的交互。本文将从理论出发,深入探讨操作系统的基本原理和功能,然后通过代码示例,展示操作系统是如何在实际中运作的。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深度理解。
|
3月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析的新手指南深入浅出操作系统:从理论到代码实践
【8月更文挑战第30天】在数据驱动的世界中,掌握数据分析技能变得越来越重要。本文将引导你通过Python这门强大的编程语言来探索数据分析的世界。我们将从安装必要的软件包开始,逐步学习如何导入和清洗数据,以及如何使用Pandas库进行数据操作。文章最后会介绍如何使用Matplotlib和Seaborn库来绘制数据图表,帮助你以视觉方式理解数据。无论你是编程新手还是有经验的开发者,这篇文章都将为你打开数据分析的大门。
|
3月前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化代码,增强功能深入理解操作系统:从用户空间到内核空间的旅程
【8月更文挑战第29天】本文将引导你深入理解Python装饰器的核心概念、应用场景及其对代码的优化作用。我们将从基础使用到高级应用逐步展开,通过实例展示如何利用装饰器提升代码的可读性和复用性,同时避免常见的陷阱。
|
5月前
|
IDE Oracle Java
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
|
4月前
|
开发工具
环境变量,环境变量就是在操作系统中记录的一些关键性信息,以辅助系统运行,env,echo $PATH可以取出环境变量,全局变量的使用方法是定义,什么时候用,什么时候取,export MYNAME=it
环境变量,环境变量就是在操作系统中记录的一些关键性信息,以辅助系统运行,env,echo $PATH可以取出环境变量,全局变量的使用方法是定义,什么时候用,什么时候取,export MYNAME=it
|
6月前
|
存储 程序员
操作系统的运行机制、中断和异常、系统调用
操作系统的运行机制、中断和异常、系统调用
90 1