在计算机中,抽象(屏幕上的字母)与真实(电流通过内存和处理器中的电路)相遇。这种演变是如何发生的?

我想我在这里谈论的比汇编程序更深入。也许比处理器指令更深一层?在某些时候,命令实际上是由硬件解释的,但我不明白这是在哪里/如何发生的。

我没有上过大学,所以没有上CS课程或任何东西。和许多人一样,我是一个从业余爱好者变成“专业人士”的人。结果,我认为我丢失了很多拼图。我了解一点 C++,并且了解指针等概念(尽管我没有在愤怒中使用过它们),但是我只在高水平上工作过。我不确定了解这类东西是否会对我有帮助,但它确实很有趣。

有帮助吗?

解决方案

处理器操作什么样的被称为一个取解码-执行周期。机代码的说明是相当低的水平(即他们不这样做,所有这么多的一个单一的指令)。例如,增加两个数字会有一个指令序列的用语,如:

  • 负载一个指向的地址操作1到注册1
  • 载荷的价值存在的地址储存在登记册1的入登记册2
  • 负载一个指向的地址操作数的2到注册1
  • 载荷的价值存在的地址在注册的1到3登记册
  • 添加内容的注册2和登记,3并将其储存在登记册4
  • 负载一个指向目的地进入登记册1的
  • 存储内容的注册4中指定的地址注册1

内处理的是一套特别的快速存储器称为'注册文件,其中包含的内存处理器用于储存数据,这是工作上的时间。登记册文件,有几个寄存器,这是唯一标识。指令通常的工作上注册,特别是在RISC架构;虽然这不是总是这种情况下,它是一个足够好的抽象的时刻。

通常一个处理器已经装载或存储数据进入一个登记册,以用它做任何事情。操作,例如运算上的工作寄存器、采取的操作数,从两个注册,并把结果转的第三个(利益的花生的画廊,我 用一个6502-让我们不要混淆这一问题;-).该处理器具有特别指示用于装载或储存的数据注册入机器的主存储器。

处理器有一个特殊的登记册的程序计数器',其储存的地址下操作,以执行。因此,序列的用于执行的指令进大致如:

  • 取指令存放在目前的住址在程序计数器。
  • 解码指令,除了捡的实际操作中,什么注册用途,对'解决模式(它是如何工作的出在哪里可以获得或储存数据)和一些其他的位和羁绊。
  • 执行该指示。

执行该指示将会改变价值观,在各种登记册。例如,'负荷'指令将复制一个数值进入一个登记册。一个算术或逻辑(并,或者,Xor)将采取两个数值的计算三分之一。一个跳或分支机构的指示将会改变的地址,在该程序的柜台处理器启动取指令从一个不同的位置。

处理器可以有特殊的登记册。一个例子是程序计数器上所述。另一个典型的一个条件标志的登记册。这将有好几位具有特殊的含义。例如,它可能有一个标志,是设定的如果结果的最后一个算术运算是零。这适用于有条件的行动。你可以比较两个数字。如果他们是平等的,"零"标志的设置。处理器可以有一个条件指令,仅仅是执行,如果这个标志的设置。

在这种情况下,你可以递减计在一个登记册,如果是零一条件标志设置。有条件(分支对零)的可以使用一个循环,你减量计数和出口的循环,如果结果的减量的指示为零。在一些处理器(例如手臂的家庭)的所有指令是有条件的,与一个特殊的'做的总是'的条件对无条件的说明。

一些实例的典型处理器的指令是:

  • 递增或递减的一个登记册
  • 载或储存内容的注册进入存储器。你还可以有的地址载或储存偏通过的内容,另一个登记册。这可以让你轻松的环超过一系列数据增加的其他登记册。
  • 增加、减、乘、逻辑运算计算出的价值观。这些采取的操作数,从两个登记册和地方的结果在第三个。
  • 跳跃到另一个位置-这移动内容的位置进入程序计数,并开始获取的指示的新的位置。
  • 推动或流行价值观到堆。

这个计算器后 有一个例子一个小段C编译代码和大会语文出自该段。它应该给你一个例子之间的排序关系的一个高级别的语言和机器编码输出,它汇编。

最好的方式来学习这是为了得到汇编和尝试。这个用来是很容易在旧的、更简单的计算机就像8位微的1980年代。最近的事这种类型的建筑可用这些天是嵌入式系统。你可以得到一个发展理事会的一个嵌入式处理器微型芯片PIC相当便宜。作为这种类型的建筑具有较少的行李比一个现代化的操作系统还有少我-加点和t-交叉使用的系统的电话。这将使它更容易地引导一种大会语言节目在此类架构;更简单的架构还更容易理解。

另一种选择是让一个仿真器例如 垃圾信息.这将仿效CPU和让你的组装和运行程序。这种模拟器是,他们也将有设施的单一步进方案(就像一个调试器),并表示内容的注册文件。这可能有助于了解为什么实际。

其他提示

我倒是非常建议你阅读这本书的代码时,它给出的计算机从不同的系统如何演变的详细历史记录。

这是非常耐看将如何从东西莫尔斯电码,通过发展一个简单的加法机,然后到一些汇编给你解释。它应该给你的准确图片如何机器指令interpretted和由CPU的硬件,存储器等使用。

实际上还有一个层下面的机器语言,我已经从朋友最近发现。这就是所谓的Microcode

详情请参阅此Wikipedia文章: http://en.wikipedia.org/wiki/Microcode

让我们假设最真实的是电流和电压(如果你深入的话,你可能会发现甚至电子也是一个抽象)。抽象的第一步是考虑 +5V 电压代表设置为“1”的位,0V 电压代表设置为“0”的位。通过开关,您可以决定电线的价值。

使用第二根电线和第二个开关,您可以获得两个二进制值。使用它们最有趣的是将它们的二进制值与 AND、OR 和 NOT 等运算组合起来。这里涉及到两个概念: 晶体管 为了真实和 逻辑 为了抽象。这样,您就可以对两个二进制输入执行加法、减法和许多其他操作。您可以添加更多连线来表示“0”和“1”以外的值。沿着这条路走,你会得到一个 算术逻辑单元.

现在是时候包括时间了。如果您希望 ALU 产生多个结果,则必须一次提供一个输入数据,因此需要一个时钟和一个控制单元来进行排序操作。您还需要用于存储输入值和结果的内存,以及用于命令和观察的输入和输出设备。沿着这条路走,你会得到一个 冯·诺依曼架构, ,这是几乎所有计算机体系结构的基础。

下一个抽象级别是当您决定使用适当的电子设备时,内存中的这个特定位将刺激 LCD 显示器的特定像素。

您可能会发现查尔斯Petzold的代码一个有趣的阅读:点击 http://www.amazon.co。英国/代码语言 - DV-未定义查尔斯-彼佐尔德/ DP / 0735611319

你的问题的前提是不正确。没有鸿沟。软件输入和电子保存。这仅仅是软件显示您在英语语言一样,使人们可以轻松地跟踪它。

因此,例如,当你输入“更改我的桌面屏幕绿色”,通过键盘,它直接安装在金属电子会(阅读如何键盘/鼠标/触摸屏)的工作。它只是你把它看作你的屏幕上的英文原文。采取一步,你输入的文本是高级语言,它被转换成机器代码,使CPU可以对其执行逻辑。本机代码是电子形式也。例如,该文本将被转换成操作码等,但操作码处于电子形式和CPU可以处理那些。

在底线是,你的电脑里面的一切是从进入的那一刻电子表格。它是在你的硬盘或内存(晶体管等),无论是。这只是你看到它在文字在屏幕上。

再次没有鸿沟。保存在内存中的软件(晶体管等)或硬盘已经存在电子。硬件(硬逻辑 - 门)是需要运行软件(您希望在硬件与软件做什么)。你不能在非电子形式输入电脑什么。

我希望这是有道理的。

好的,实际点放在满足硬件取决于你是什么做的,当然。但是把你(优秀)的例子中的"显示文本":

从抽象的硬件:

  • 用户类型的信件进入她的文字处理(wp)
  • wp软件的第一个商店中的字母记忆的一部分作为文件正在编辑
  • wp软件,然后告诉用户界面的图书馆使用,它希望显示该文本正在编辑中的一个窗口(发生这种情况不断,当然)。UI库将系统的依赖(Windows API MS Windows,X Windows或脱等。在Linux上,AWT/摆在爪哇等等。)
  • UI图书馆将通过数据通过一些更多的抽象层。特别是,它将执行化(将信息"显示一个"入素格代表一)
  • 最终,信息会被传递给驱动装置的图形卡。这是我们在哪里见面"真正的"硬件:-).通常情况下,图卡公开的"视频存储器",即存储卡上的CPU可以写。图卡驱动程序(其运行的CPU)会编写的像素的一个视频存储器。
  • 图卡路将阅读的视频存储器和转换数据存入一个视频信号出去的视频连接上卡和监测。
  • 监视器会显示什么看起来我们希望像一个:-)

这个解释可能不太学术,但这就是我的理解(也没有上过大学)。

第一步涉及 布尔的代数在 19 世纪证明任何数学运算都可以使用一系列符号和一些相关运算符来表达。因此,具有常见 +、-、*、/ 运算符的以 10 为基数的算术可以仅使用两个符号(0、1/真、假)和逻辑运算符(AND、OR 等)来表示,从而产生布尔逻辑,即数字计算的数学基础。

第二步是 艾伦·图灵的工作构建了一个可以处理符号的假想机器的数学模型。对图灵机的简单描述是任何具有内存(用于存储其状态)的自动机,对代表其状态的一系列符号进行操作,并解释定义从一种状态到另一种状态的过渡的另一系列符号。

现代数字处理器是图灵机的实现,该图灵机使用布尔逻辑代数作为符号和运算符基础(查看“How Stuff Works”) 布尔逻辑的详细解释)。这样做的原因是真/假逻辑状态可以很容易地映射到电信号(+,-),并且它们相关的运算符可以在晶体管电路中实现,给定二进制输入(电信号)可以根据布尔运算符。因此,任何现代计算机都是具有内存的机器 存储其状态(以二进制电/磁形式编码)和接受电脉冲和运算符(处理器指令)的电路阵列,并以非常快的速度相应地输出结果。

因此,用任何计算机语言编写的每个程序最终都会被编译器或运行时翻译成一系列布尔运算供处理器执行

机代码,相信,是作为低级别为一个可以去。它是直接由处理器理解和执行而不翻译。该处理器是建立与一组特定的限定的机器代码对于给定的体系结构(x86,PPC,ARM等)的指令。

从在屏幕上绘制字母来计算圆周一切是,在其最基础的水平,在机器代码运行。在屏幕上绘制的信仅仅是一个创建其计算信高度,颜色和像素位置,并使用视频输出装置绘制它们在屏幕上的一些机器代码的问题。

好吧,如果你知道怎样的处理器访问内存,那么你已经知道答案。存储器和其它硬件在(几乎)相同的方式,这取决于阉羊处理器使用“存储器映射的IO”或“IO映射的IO”来访问。在第一种情况下,处理器只是试图读取和写入内存地址 - 但有没有没有记忆 - 而不是它的一些其他硬件设备,但处理器实在无法看出其中的差别。后者的情况下是非常相似的。

在另一方面,如果对处理器如何访问内存不知道,你应该看看了什么“地址总线”和“数据总线”是让你开始。

您会得到它错了。

一切电脑确实,无论是表示字母在屏幕上或做一些计算,可以在抽象的不同(多)水平观看,从电流以像钱抽象概念操作上的银行帐户。

这就是说,建立电路,用于一个简单的微处理器并不难,一个ALU,一些寄存器和一些控制逻辑。 Altera公司对Cyclone II入门板,这是高级教程,但我找不到它在网络上。

下面是真正的交易。我的出发点。一切都需要能量来操作。开/关在一个限度内定义。例如,如果3和5 V之间它是如果小于3伏其关闭。摩尔斯电码的概念。我在温度计工作,所以我需要做或购买的传感器。然后,我需要进行校准。翻译的信号从信号中没有信号或信号的强度的温度。这就是现在的我。

这是不容易的一句话来回答。阅读一本关于计算机体系结构,学习一些组件,我相信你会明白这是如何发生的。

当我们进入任何键或发出任何命令,则小型电波成为由于通过按压键的实际我们完成电路

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top