机器语言,二进制代码和二进制文件之间的区别

时间:2014-02-05 08:05:41

标签: encoding binary

我正在学习编程,在很多方面我都看到了概念:“机器语言”,“二进制代码”和“二进制文件”。我不清楚这三者之间的区别,因为根据我的理解,机器语言是指计算机可以理解的原始语言,即0和1的序列。

现在如果机器语言是0和1的序列,而二进制代码也是0和1的序列,那么机器语言=二进制代码

二进制文件怎么样?什么是二进制文件?对我来说,“二进制文件”这个词意味着一个由二进制代码组成的文件。例如,如果我的文件是:

010010101010010
010010100110100
010101100111010
010101010101011
010101010100101
010101010010111

这是一个二进制文件吗?如果我谷歌二进制文件并看到Wikipedia我看到这个二进制文件的示例图片让我困惑(它不是二进制文件?....)

Hex image

我的混乱发生在哪里?我在这里混合文件编码还是什么?如果我要问一个人给我看什么是机器语言,二进制代码和二进制文件,它们会是什么? =)我猜这种区别对我来说太抽象了。

Thnx任何帮助! =)

更新

例如,在Python中,文件I / O tutorial中有一个短语,我不明白:打开一个文件只能以二进制格式读取。什么以二进制格式读取文件意味着什么?

4 个答案:

答案 0 :(得分:19)

机器代码和二进制文件是相同的 - 带有基数2的数字系统 - 1或0. 但机器代码也可以用十六进制格式表示(十六进制) - a基数为16的数字系统。二进制系统和十六进制是非常相互关联的,它很容易从二进制转换为十六进制,并从十六进制转换回二进制。而且因为hex比二进制更易读和有用 - 它经常被使用和显示。例如,在您的问题上面的图片中 - 使用十六进制数字!

假设您有二进制序列1001111000001010 - 它可以通过按块分组轻松转换为十六进制 - 每个块由四位组成。

 1001 1110 0000 1010 => 9  14 0 10 which in hex becomes: 9E0A. 

人们可以同意9E0A比二进制更易读 - 而十六进制就是你在图像中看到的。

答案 1 :(得分:7)

我真的很惊讶没有看到我想要的信息,回过头来看,我想这个帖子的标题并不完全适合OP提出的问题。

你们都说"机器码是一堆数字"。

当然,"代码"是一堆数字,但是人们想知道的是什么(我在猜测)是"实际发生了什么?"

在编程方面,我是一个相当新手的人,但我理解得足够自信,大致相信'回答这个问题。

对于实际电路,机器代码不是数字或值。 机器代码是一堆打开或关闭的电压门,根据它们连接的内容,某些灯会在特定时间闪烁等。

我猜测"机器代码"指示将到达其整个目的地的特定电信号的路径和时间。

因此对于010101,3个电压门关闭(0' s),3个电压门打开(1' s)

我知道我在这里接近正确的答案,但我也知道它更为复杂 - 因为我可以想象我不知道的事情。

对于一个简单的电路来说,010101将是简单的指令,但我无法理解的是复杂的计算机如何处理所有信息。

所以我想让它分解?

x-Bit-processors告诉处理器一次可以处理多少位。

一位是1或0,"开"或"关","打开"或"已关闭"

所以32位处理器进程" 10101010 10101010 10101010 10101010" - 一次这么多位。

处理器是一个集成电路",它就像一个紧凑的电路板,包含电阻/电容/晶体管和一些存储器。我不确定处理器是否有电阻器,但我知道你通常会在电路板上的实际处理器周围找到大量的电阻器

无论如何,晶体管是一个开关,所以如果它接收到1,它会向一个方向发送电流,或者如果它接收到0,它将向不同的方向发送电流......(或类似的东西) )

所以我想,随着机器代码的进行......处理器接收到的代码段改变了电压通道,使得它向计算机的另一部分发送信号(为什么你认为处理器有这么多引脚?),可能是另一个更专门针对特定任务的集成电路。 然后该集成电路接收一块代码,比如说2到4位01或1100或者其他东西,这进一步定义了信号的最终目的地将在哪里结束,这可能是直接返回处理器,或者可能是一些输出设备。

机器码是一种非常有效的方式来获取电路并将其连接到灯泡,然后将该灯泡从电路中取出并将电路切换到不同的灯泡

计算机中的内存非常必要,因为要让计算机执行任何操作,您需要输入所有内容(在机器代码中)。相反,所有的1和0都存储在一些存储设备中,或者是带有磁头引脚的旋转硬盘,它可以读取'基于磁盘电荷的1或0或使用一系列晶体管的闪存器件,其中通过引发1和0来发送电压(I& s& s) #39;我不完全了解闪存的工作原理)

幸运的是,有人花时间想出一个不同的编号基数系统(十六进制),以及一种将这些数字(翻译它们)转换回二进制数的方法。然后所有软件程序都从那里扩展开来。

键盘上的每个键都会创建一个二进制的特定信号,转换为 使用特定电压打开或关闭一堆开关,以便可以通过屏幕上的特定单个像素运行电流,从而创建" 1"或" 0"或者" F",或者这篇文章的所有人物。

所以我想知道,一个节目'节目'或者'制作'电脑'做' ...而是,编译器如何编译与二进制不同的代码程序? 现在很难想,因为我非常疲倦(所以我不会尝试)但是因为你在电脑上做的一切都是因为某些程序。 任务管理器中有正在运行的程序(进程)。这些使您的计算机屏幕看起来已经习以为常,并且还允许对屏幕进行操作,就好像说屏幕上的图片是真实的对象一样。 (他们不是,他们只是图片,甚至是你的鼠标光标) (好吧,我已经完成了。足够的编辑和扩展我的想法,它是时候睡觉了)

另外,我真正得到的不仅仅是0''''通过电脑。 似乎是一个' 0' 0不能是缺乏电压,而必须是其他类型的信号 其中可能是1伏特= 1,0.5伏特= 0。电路中仍然会发送信号的电流之间存在一些明显差异,但可能是打开和关闭特定电路之间的差异。

如果我对这个世界的计算机工程师有任何严肃的道具,那么复杂程度令人垂涎欲滴。我希望有一天能够了解有关技术的一切。现在我只是试图通过arduino。

最后......我一直在想的......甚至可以在不使用其他电脑的情况下对今天的电脑进行编程吗?

答案 2 :(得分:4)

您必须了解计算机的基本原理如何运作,这将为您解决问题...因此,我建议您阅读Neumann Architecture

之类的内容

基本上在一台非常简单的计算机中,你只有一个像数组一样的内存 它包含处理器的说明,数据和所有内容都是二进制数字。

你的程序从你记忆中的某个地方开始并读取第一个数字......

所以这就是扭曲:这些数字可以是指令或数据。 您的处理器读取这些数字并将其解释为指令

示例:起始地址为0

在0中的指令类似于“从地址120读取值到ALU(数学单元)

然后它步骤解决1

“从地址121读取值到ALU”

然后步骤解决2

“减去ALU中的数字”

然后它步骤解决3

“如果ALU值小于零,请转到地址10”

它不小于零,所以它逐步解决4

“转到地址20”

你知道这是一个基本的if(a< b)

您可以将这些说明写为数字,它们可以由您的处理器运行,但因为没有人愿意做这项工作(这就是他们在60年代用穿孔卡做的事情) 汇编程序被发明了...... 看起来像是:

从地址10和11添加10,11,20 //加载变量;运行添加并存储到地址20

结论:

汇编程序(处理程序指令)可以称为二进制,因为它以普通数字存储

但其他一切也可以是二进制文件。

实际上,如果你有一个简单的.exe文件,它就是......如果你有变量,比如a = 10和b = 20,那么这些值可以存储在if子句和for循环之间的某些位置......这取决于编译器放置这些

的位置

但是如果你有一个复杂的3D模型,它可以存储在一个单独的文件中,里面没有可执行代码......

我希望稍微澄清一下。

答案 3 :(得分:3)

计算机语言低级编程语言,通常完全由数字组成。因为它们只是数字,所以可以用二进制,八进制,十进制,十六进制或任何其他方式查看它们。 Dave4723在他的回答中做了更彻底的解释。

二进制代码基本上是由 1s和0s序列表示的任何信息。

二进制文件是任何非文本文件;例如.exe.png