有人可以告诉我计算机编程如何工作的基础知识吗? [关闭]

2024-05-16

是什么让编程语言的所有单词实际上都有作用?我的意思是,到底发生了什么让计算机知道所有这些词的含义?如果我口头告诉我的计算机做某事,它不会做,因为它不理解。那么,这些被写入语言的人类文字到底是如何让计算机执行一些所需的活动的呢?


这一切都始于 CPU 或处理器。每种处理器类型都有一组定义的能够执行的指令。这些指令对 1 和 0 进行操作,而这些指令又代表您希望它们执行的任何操作:数字、字母,甚至指令本身。

在最低级别,零是由晶体管上存在的特定电压(通常接近 0V)确定的,而 1 是存在不同的电压(取决于 CPU,例如 5V)

机器指令本身是一组零和一,放置在处理器中称为寄存器的特殊位置,处理器从特定位置获取指令及其操作数并执行操作,将结果放置在另一个位置,然后再获取下一条指令等等,直到它用完要执行的指令或被关闭。

一个简单的例子。假设机器指令 001 表示两个数字相加。

然后编写一个将两个数字相加的程序,通常如下所示:

4 + 5

然后,您将此文本传递给编译器,该编译器将为您将运行该程序的处理器生成足够的机器代码(旁注,您可以编译代码以在与当前正在运行的处理器不同的处理器中运行,这是一个名为交叉编译,它很有用,例如,在嵌入式平台中)。好吧,编译器最终会大致生成,

001 00000100 00000101

使用额外的样板机器代码将 001 指令放置在下一个指令寄存器(指令指针)中,并将二进制编码数放置在数据寄存器(或 RAM)中。

从结构化语言生成机器代码的过程相当复杂,并且限制了这些语言最终的正常程度。这就是为什么你不能用英语编写程序,其中有太多歧义,编译器无法生成正确的零和一序列。

CPU 可以执行的指令相当基本和简单,加法、除法、求反、从 RAM 读取、放入 RAM、从寄存器读取等等。

下一个问题是,这些简单的数字指令如何产生我们在计算(互联网、游戏、电影播放器​​等)中看到的所有奇迹?

它基本上可以归结为创建足够的模型,例如 3D 游戏引擎有一个代表游戏世界的数学模型,并可以基于它计算游戏对象的位置/碰撞。

这些模型是基于许多这样的小指令构建的,这就是高级语言(不是机器代码)真正发挥作用的地方,因为它们提高了抽象级别,然后您可以更接近您想要实现的模型,让你可以轻松地推理出诸如如何根据从控制器接收到的输入有效地计算士兵将要到达的下一个位置之类的事情,而不是因为你太忙于不忘记 0 而妨碍你轻松推理。

一个关键时刻发生在从汇编语言(一种与机器代码非常相似的语言,它是第一种编程语言,并且它是特定于 CPU 的。每条汇编指令都直接翻译成机器代码)到 C(可在不同 CPU 之间移植,并且是比汇编更高的抽象级别:每行 C 代码代表许多机器代码指令)。这对于程序员来说是生产力的巨大提升,他们不再需要在不同的 CPU 之间移植程序,并且可以更轻松地思考底层模型,从而导致我们所看到的软件复杂性持续增加(甚至是需求)从 20 世纪 70 年代至今。

悬而未决的缺失环节是如何控制如何处理该信息以及如何接收来自外部源的输入,例如在屏幕上显示图像或将信息写入硬盘驱动器,或在打印机上打印图像,或从外部接收击键。键盘。这一切都是通过计算机中存在的其余硬件实现的,这些硬件以类似于 CPU 的方式进行控制,您将数据和指令放置在图形卡或网卡或硬盘驱动器或计算机中的某些晶体管中。内存。 CPU 具有的指令允许其将某些数据或指令放入(或从中读取信息)不同硬件的正确位置。

与我们今天所拥有的存在相关的另一个事情是,所有现代计算机都带有称为操作系统的大型程序,它管理所有基本的东西,例如与硬件通信和错误处理,例如程序崩溃时会发生什么等等。此外,许多现代编程环境都附带a lot已编写的代码(标准库)来处理许多基本任务,例如在屏幕上绘图或读取文件。该库将依次要求操作系统代表其与硬件进行对话。

如果这些不可用,编程将是一项非常非常困难和乏味的任务,因为您编写的每个程序都必须再次创建代码以在屏幕上绘制单个字母或从每种特定类型的硬盘驱动器读取单个位,例如。

看来我得意忘形了,我希望你能从中理解一些:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人可以告诉我计算机编程如何工作的基础知识吗? [关闭] 的相关文章

  • 扩展 Mono C# 编译器:有任何文档或先例吗?

    我目前正在参与一些有趣的编程语言研究 到目前为止 这些研究的重点是通过一些非常强大的基于程序员生产力的功能来扩展即将推出的 Java 7 0 编译器 这项工作应该同样适用于 C 等相关编程语言 我目前正在研究用于对该功能的 C 端口进行原型
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 特殊名称属性还允许哪些其他巧妙的技巧?

    研究中一个问题 https stackoverflow com questions 13259162 vb net power operator overloading from c sharp关于实现 Visual Basic Power
  • 编译器值类型解析和硬编码“0”整数值

    首先 介绍一些背景知识 阅读问题并接受答案发布在这里 https stackoverflow com questions 8352260 why does the sqlparameter name value constructor tr
  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • C# 中的编译器

    我正在寻找一个可定制的解析器和 或词法分析器 它可以让我在 C 中构建自定义语法检查器 本质上 用户将输入一行代码 自定义 语法检查器将能够响应是否编写正确 That s Irony http irony codeplex com 请务必阅
  • 似乎有时 Delphi 是区分大小写的 - “覆盖方法应该与祖先的大小写匹配”

    今天我遇到了一个 奇怪 的提示 覆盖方法 xxxx 应匹配祖先 yyyy 的大小写 解决方案是完全按照祖先中的方式声明方法名称 我相信这是自 Delphi Net 编译器以来编译器中保留的东西 与祖先中完全相同的方法声明方法使编译器 沉默
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • 如何阅读英特尔操作码符号

    我正在阅读一些引用的材料Intel vol 2 SDM x86 手册 https www intel com content www us en developer articles technical intel sdm html关于汇编
  • BISON + FLEX 语法 - 为什么标记被连接在一起

    我想了解为什么 BISON 按照以下规则连接两个标记 stmt declaration assignment exp ID lt this rule fprintf stderr n my id is s 1 如果你检查输出就会明白我的意思
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 反斜杠“\”的真正含义是什么?

    我想知道 Java 的反斜杠 计算机或编译器如何看到这个反斜杠以及它如何存储在计算机中 我读到反斜杠删除了以下字符的特殊含义 但是计算机如何处理这个问题以及在什么情况下以其他方式处理它呢 例如空字符 0在C编程中 是字符串的结尾 但它是单个
  • 使 C# 编译器相信执行将在成员返回后停止

    我认为目前这是不可能的 或者这是否是一个好主意 但这是我刚才正在考虑的事情 我使用 MSTest 对我的 C 项目进行单元测试 在我的一项测试中 我执行以下操作 MyClass instance try instance getValue
  • 如何从 Java 生产代码中删除调试语句

    编译器是否可以从生产代码中删除用于调试目的 例如日志记录 的语句 调试语句需要以某种方式进行标记 可能使用注释 设置属性 debug true 并在每个调试语句中检查它很容易 但这会降低性能 如果编译器能够简单地使调试语句消失 那就太好了
  • 我需要一个树转储选项,该选项在当前的 gcc 版本中不再存在

    旧版本的 GCC 例如 4 0 2 或 4 1 2 有该选项 df see 用于调试程序或 GCC 的选项对于4 1 2 http gcc gnu org onlinedocs gcc 4 1 2 gcc Debugging Options
  • MSVC 可能/不太可能等效

    GCC 编译器支持 builtin expect 语句 用于定义可能和不可能的宏 eg define likely expr builtin expect expr 1 define unlikely expr builtin expect
  • Java:特定枚举和通用 Enum 参数

    我想将任何枚举值传递给实用程序类中的方法并获取相同枚举类型的另一个枚举值 像这样的事情 public class XMLUtils public static Enum defaultValue if element hasAttribut
  • 64位系统上编译32位系统-兼容性

    我有一台带有 64 位操作系统的 64 位机器 我如何使用 Visual Studio 2010 编译程序 以便它们在 32 位系统上运行 如果我在 64 位机器上安装 32 位操作系统 我认为这不会有问题 如果您正在谈论 NET 应用程序
  • 如何为 iPhone 构建静态库?

    我想我已经到处寻找问题的答案 但没有运气 我正在尝试创建一个简单的静态库来在 iPhone 设备上运行 但我总是以 XCode 结束 说 文件不属于必需的架构 并且我已经尝试了我发现的每个构建标志 但没有任何运气 我已经让它在模拟器上工作了
  • MSBuild 与编译器

    从命令提示符使用 MSBuild 和 C 编译器有什么区别 我想在不使用 Visual Studio 的情况下手动构建我的解决方案 项目 并且我想学习如何使用命令行工具 C 编译器你的意思是csc exe 如果这就是你的意思 那么csc a

随机推荐