软件在何处以及如何与硬件相遇?

时间:2009-03-30 08:13:52

标签: hardware electronics

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

我认为,我说的比汇编者更深入。也许比处理器指令更深?在某些时候,命令实际上是由硬件解释的,但我不明白在哪里/如何发生。

我没有上大学,所以没有参加CS课程或其他任何事情。像许多人一样,我是一个爱好者,变成了“亲”。结果,我认为我失踪了很多拼图。我知道一点点C ++,并且理解指针等的概念(尽管我并没有在愤怒中使用它们),但是我只是在高级别工作。我不确定知道这种东西会不会对我有所帮助,但这肯定很有趣。

15 个答案:

答案 0 :(得分:12)

答案 1 :(得分:6)

我非常建议您阅读本书Code,它详细介绍了计算机如何从不同系统演变而来。

它非常吸引人,并将向您解释事情是如何从摩尔斯电码代码演变为简单的添加机器再到某些程序集。它应该让您了解机器指令如何被CPU,内存等硬件解释和使用。

答案 2 :(得分:4)

我最近从一位朋友那里发现了另外一个机器语言以下的层。它被称为Microcode

有关详细信息,请参阅此维基百科文章:http://en.wikipedia.org/wiki/Microcode

答案 3 :(得分:4)

让我们假设最真实的是电流和电压(如果你走得更深,你可能会发现即使是电子也是一种抽象)。抽象的第一步是考虑+ 5V电压表示设置为'1'的位,0V电压表示设置为'0'的位。使用开关,您可以决定电线的值。

使用第二根线和第二根开关,您将获得两个二进制值。最有趣的是将二进制值与AND,OR和NOT等操作结合起来。这里涉及两个概念:真实的transistor和抽象的logic。有了它,您可以对两个二进制输入执行加法,减法和许多其他操作。您可以添加更多电线来表示“0”和“1”以外的值。通过这种方式,您获得了ALU

现在是时候把时间包括在内了。如果您需要ALU的多个结果,则必须一次提供一个输入数据,因此需要时钟和控制单元进行排序操作。您还需要用于存储输入值和结果的存储器,以及用于命令和观察的输入和输出设备。通过这种方式,您获得了Von Neuman Architecture,这是几乎所有计算机体系结构的基础。

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

答案 4 :(得分:3)

你可能会发现Charles Petzold的代码是一本有趣的读物:
http://www.amazon.co.uk/Code-Language-DV-Undefined-Charles-Petzold/dp/0735611319

答案 5 :(得分:2)

你的问题的前提是不正确的。没有鸿沟。软件以电子方式输入和保存。只是用类似英语的语言向您显示软件,以便人们可以轻松地跟踪它。

因此,例如,当您通过键盘输入“将我的桌面屏幕更改为绿色”时,它将直接在金属上以电子方式(读取键盘/鼠标/触摸屏的方式)工作。只是你在屏幕上看到它是英文文本。更进一步,您输入的文本是高级语言,它将转换为机器代码,以便CPU可以对其执行逻辑。机器代码也是电子形式。例如,文本将转换为操作码等,但操作码是电子形式的,CPU可以处理它们。

最重要的是,计算机内的所有内容从输入之时起都是电子形式。它可以在您的硬盘或内存(晶体管等)上。只是你在屏幕上的文字中看到它。

同样,没有鸿沟。保存在存储器(晶体管等)或硬盘中的软件已经以电子方式存在。运行软件需要硬件(硬逻辑 - 门)(您希望硬件与软件有关)。您不能以非电子形式在计算机中输入任何内容。

我希望这是有道理的。

答案 6 :(得分:1)

嗯,您遇到硬件的实际情况取决于您正在做什么,当然。但要采用“优秀”的“显示文字”的例子:

从抽象到硬件:

  • 用户在字处理器(wp)中键入字母
  • wp软件首先将字母存储在内存中,作为正在编辑的文档的一部分
  • wp软件然后告诉它使用的用户界面库,它想要在窗口中显示正在编辑的文本(当然,这会不断发生)。 UI库将取决于系统(MS Windows上的Windows API,Linux上的X Windows或QT等,Java上的AWT / Swing等)。
  • UI库将通过几个抽象层传递数据。特别是,它将执行光栅化(将信息“显示A”转换为代表A的像素网格)
  • 最终,信息将传递给图形卡的设备驱动程序。这是我们遇到“真正的”硬件的地方:-)。通常,图形卡暴露“视频存储器”,即CPU可以写入的卡上的存储器。图形卡驱动程序(在CPU上运行)会将A的像素写入视频内存。
  • 图形卡的电路将读取视频内存并将数据转换为视频信号,该视频信号从卡上的视频连接器和显示器上传出。
  • 显示器将显示看起来像A: - )
  • 的内容

答案 7 :(得分:1)

这种解释可能不太具有学术性,但这就是我理解它的方式(也没有去大学)。

第一步涉及Boole的代数,在19世纪证明任何数学运算都可以用一系列符号和一些相关的算子来表达。因此,使用公共+, - ,*,/运算符的基数10算术可以仅使用两个符号(0,1 / true,false)和逻辑运算符(AND,OR等)来表示,这些符号通向布尔逻辑,即数字计算的数学基础。

第二步是Alan Turing的工作,它构建了一个可以处理符号的虚拟机器的数学模型。图灵机的天真描述将是具有存储器(存储它的状态)的任何自动机,对表示其状态的一系列符号进行操作,并解释定义从一种状态到另一种状态的转换的另一系列符号。

现代数字处理器是图灵机的一种实现,它使用Boole的逻辑代数作为符号和运算符基础(看一下How Stuff Works detailed explanation of Boole's logic at work)。这样做的原因是真/假逻辑状态可以很容易地映射到电信号(+, - ),并且它们的相关运算符可以在晶体管电路中实现,给定二进制输入(电信号)可以根据电子信号输出结果。布尔运算符。所以任何现代计算机都是具有记忆功能的机器 存储它的状态(以二进制电/磁形式编码)和一系列接受电脉冲和操作员(处理器指令)的电路,并以相当快的速度输出结果。

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

答案 8 :(得分:0)

我相信机器代码与人们可以去的一样低。它由处理器直接理解并在没有解释器的情况下执行。处理器使用一组指令构建,这些指令定义给定体系结构(x86,PPC,ARM等)的机器代码。

从屏幕上的绘图字母到计算pi的所有内容,在最基本的级别,都在机器代码中运行。在屏幕上绘制字母只需要创建一些计算字母高度,颜色和像素位置的机器代码,并使用视频输出设备在屏幕上绘制它们。

答案 9 :(得分:0)

你弄错了。

计算机所做的一切,无论是在屏幕上显示字母还是进行一些计算,都可以在不同的(多个)抽象层次上查看,从电流到抽象概念的操纵,如银行账户上的钱。 / p>

也就是说,为简单的微处理器构建电路并不困难,ALU,一些寄存器和一些控制逻辑。 Altera将此作为Cyclone II入门板的高级教程,但我无法在网上找到它。

答案 10 :(得分:0)

好吧,如果您知道处理器如何访问内存,那么您已经知道了答案。内存和其他硬件以(几乎)相同的方式访问,具体取决于处理器使用“内存映射IO”或“IO映射IO”。在第一种情况下,处理器只是尝试读取和写入内存地址 - 但没有内存 - 而是它的其他硬件设备,但处理器真的无法区分。后一种情况非常相似。

另一方面,如果您不知道处理器如何访问内存,您应该查找“地址总线”和“数据总线”是什么让您入门。

答案 11 :(得分:0)

答案 12 :(得分:0)

这是真正的交易。我的出发点。一切都需要能源来运作。开/关定义在限制范围内。例如,如果在3到5V之间,如果它的电压低于3伏就会打开。摩尔斯电码概念。我正在研究温度计,所以我需要制造或购买传感器。然后我需要校准它。将信号无信号或信号强度的信号转换为温度。这就是我现在所处的位置。

答案 13 :(得分:-1)

一句话不容易回答。阅读一本关于计算机体系结构的书,学习一些程序集,我相信你会理解这是如何发生的。

答案 14 :(得分:-1)

当我们输入任何键或给出任何命令时,通过按键实现的小电波实际上是我们完成电路