实际的机器代码在不同的点上是什么样子的



关于机器代码到底是什么,似乎有很多意见。我听过一些人说它是汇编、二进制或十六进制。

机器代码本质上是特定处理器的一组指令,这种说法正确吗?如果是这样的话,我想这些可以用二进制或十六进制表示法或汇编来表示。但是,未翻译的"实际"机器代码是什么样子的呢?它是基于架构的单词大小吗?或者,十六进制是所有意图和目的的默认表示形式吗?

坐在硬盘上是什么样子的?登记时是什么样子的?当它被处理时,它只是一组当时的电压变化吗?

机器代码只是与特定处理器体系结构的CPU指令相对应的二进制数据。

我不会过多地讨论它是如何存储的,因为这取决于它存储在哪里。例如,在磁盘上,它通常被存储为一系列磁化区域。机器代码在存储方面与其他二进制数据没有什么不同。如果你的问题更多的是关于数据如何存储在计算机上,你应该研究计算机中的各种数据存储设备,如HDD、RAM和寄存器等。

可视化机器代码存储方式的最简单方法是在十六进制编辑器中查看一些代码。这显示了由十六进制数字表示的二进制数据。例如,以指令为例:

0xEB 0xFE

这可以很容易地写入1110101111111110或60414。这取决于你想如何将二进制转换成人类可读的形式

此指令表示一个无限循环。(这是假设它是在x86 CPU上运行的。其他CPU可以根据自己的意愿对其进行解释。)它可以像这样在汇编中编码:

j:
jmp j

当你运行汇编程序时,它会把上面的代码转换成上面的二进制机器代码。

说明书实际上分为两部分。第一个是所谓的操作码,即0xEB。当这段代码进入CPU时,意味着:从程序中读取一个字节,跳过那么多字节的数据。然后CPU读取字节CCD_ 2。由于它需要一个带符号的整数,所以它将二进制数据解释为数字-2。然后读取指令,指令指针向前移动2个字节。然后执行指令,使指令指针向前移动-2(0xFE)字节,这将有效地将指令指针设置为与指令启动时相同的值。

我希望这能回答你的问题。如果你想知道CPU的内部工作原理,请阅读微码和电子逻辑门。基本上,这是一组电压差,比如1位是5伏电荷,0位是0位电荷。

和我一样,你似乎对计算机如何在引擎盖下工作感到好奇。我知道的还不足以很好地回答你的问题(无论如何,这是一个很大的话题),但我强烈推荐史蒂夫·吉布森的"让我们设计一台电脑"播客系列。以下是"机器语言"成绩单的摘录,让你了解一下…

所有的跳过意味着,我们不向程序计数器添加一个,而是添加两个,或者两次添加一个。这实际上是这些机器当时的工作方式。这只会让我们跳过一跳。因此,从本质上讲,这意味着我们可以在记忆中分支到任何我们想分支的地方,或者继续前进,这给了我们足够的权力,即使这很简单,也给了我们让机器做出决定的权力。我们有输入/输出;我们有数学;我们有能力将数据从内存中的一个位置传输到另一个位置。这些都是机器工作方式的基本要素。这就是机器语言。

现在,人类的一层是所谓的"汇编语言",它只不过是命名事物。例如,您为不同的指令创建一种所谓的助记符。因此,例如,加载累加器将是LDA。存储蓄能器STA。你想让它们变短,因为你要经常打字。记住,为了完成某件事,你最终会使用很多小指令。汇编语言真正做的另一件事是,它允许您命名内存中的位置。

所以,例如,您可以说LDA,对于负载累加器,当前分数。当前分数本质上是指内存中一个被标记为"当前分数"的位置,就像一个变量一样。然后,如果你进行STA,存储累加器,新分数,它会首先将当前分数加载到累加器中,然后将其存储到一个称为新分数的不同位置。实际上,我们所谈论的只是一些简单的缩写,用来帮助记忆和使用这些单独的说明和方便的记忆位置标签,这样你就不必记住,哦,那是在位置329627。我的意思是,谁能做到?因此,你只需要用一个英语,一个字母数字短语来标记这个位置,然后你用这个短语而不是它的实际数字来指代这个位置。

事实上,你不在乎数字是多少。汇编程序会为你做的一件事就是,你只需要说我需要内存,叫做这些东西。它担心他们去哪里,因为只要他们一直被提及,这对你来说并不重要。这就是整个过程。这是机器语言和汇编语言。50年前就是这样,现在或多或少也是这样。

。但他做了更深入的研究,从晶体管和逻辑门开始。据我所知,以下是完整的系列(听众在wiki中提供了有用的图表):

  • 让我们设计一台计算机:晶体管、逻辑门(Security Now 23342:00)http://www.grc.com/sn/sn-233.htm和http://wiki.twit.tv/wiki/Security_Now_233
  • 机器语言(Security Now 23546:00)http://www.grc.com/sn/sn-235.htm和http://wiki.twit.tv/wiki/Security_Now_235
  • 听众反馈(Security Now 236,51:43)http://www.grc.com/sn/sn-236.htm和http://wiki.twit.tv/wiki/Security_Now_236
  • 间接:指针的力量(Security Now 237,27:45)http://www.grc.com/sn/sn-237.htm和http://wiki.twit.tv/wiki/Security_Now_237
  • 听众反馈(Security Now 238,40:28)http://www.grc.com/sn/sn-238.htm和http://wiki.twit.tv/wiki/Security_Now_238
  • 堆栈、寄存器和;递归(Security Now 239,1:01:00)http://www.grc.com/sn/sn-239.htm和http://wiki.twit.tv/wiki/Security_Now_239
  • 听众反馈(Security Now 240 48:16,1:01:21)http://www.grc.com/sn/sn-240.htm和http://wiki.twit.tv/wiki/Security_Now_240
  • 硬件中断(Security Now 24142:25)http://www.grc.com/sn/sn-241.htm和http://wiki.twit.tv/wiki/Security_Now_241
  • 听众反馈(Security Now 24259:27)http://www.grc.com/sn/sn-242.htm和http://wiki.twit.tv/wiki/Security_Now_242
  • Multiverse:多线程、多任务、多处理、多核(Security Now 24747:15)http://www.grc.com/sn/sn-247.htm和http://wiki.twit.tv/wiki/Security_Now_247
  • 听众反馈(Security Now 249,1:30:21)http://www.grc.com/sn/sn-249.htm和http://wiki.twit.tv/wiki/Security_Now_249
  • 操作系统(Security Now 250,43:22)http://www.grc.com/sn/sn-250.htm和http://wiki.twit.tv/wiki/Security_Now_250
  • 听众反馈(Security Now 251,1:00:22)http://www.grc.com/sn/sn-251.htm和http://wiki.twit.tv/wiki/Security_Now_251
  • RISC与CISC(Security Now 25253:31)http://www.grc.com/sn/sn-252.htm和http://wiki.twit.tv/wiki/Security_Now_252
  • 听众反馈(Security Now 25350:38)http://www.grc.com/sn/sn-253.htm和http://wiki.twit.tv/wiki/Security_Now_253
  • 我们将为速度做些什么:流水线、分支预测(Security Now 254,29:30)http://www.grc.com/sn/sn-254.htm和http://wiki.twit.tv/wiki/Security_Now_254

如果有人对Steve在这些剧集中所说的任何话有异议,最好的反馈方式是http://www.grc.com/feedback.htm或http://www.grc.com/discussions.htm或https://twitter.com/SGgrc

为初学者解释

从一开始,电脑就有很多"开关"。例如,LED灯可以关闭
或打开,只有两个选项(1=打开或0=关闭)。如果你有两个LED,你可以关闭LED 1,打开
2,反之亦然,或者你可以同时打开或关闭它们。现在有更多的可能性

你可以计算出有多少不同的可能性
1个灯=2^1=2种可能性
2个灯=2 ^2=4种可能性
8个灯=2 ^8=256种可能性

所以计算机只读取零和一。一台计算机有很多开关,这取决于CPU的容量。要告诉电脑激活一盏灯,你需要在系统中添加0和1,这将是一项非常艰巨的任务。为了避免这种情况,他们将可能性转换为十六进制数字。汇编只是一种计算机语言,它可以将您键入的字母转换为0和1(二进制代码),并按照说明进行操作。

相关内容

  • 没有找到相关文章

最新更新