【问题标题】:Is there a programming language "below" Assembly? [closed]是否有“低于”汇编的编程语言? [关闭]
【发布时间】:2010-09-20 22:38:18
【问题描述】:

是否有“低于”汇编的编程语言?

【问题讨论】:

  • youtu.be/j9I2KfGKv4M 是关于指令集架构和微架构区别的好讲座
  • 机器码下面的语言是用于编写硬件的逻辑,可能是 Verilog 或 VHDL(可能介于两者之间的模微码。)

标签: assembly machine-code microcoding


【解决方案1】:

实际上在机器码下面有一层代码,称为Microcode

【讨论】:

  • 微码是一个 ROM 块,其中每个位用于切换某些内部电路。一系列“单词”引导 CPU 执行单个机器语言指令,因此,它甚至“低于”机器语言。
  • 我同意哈维尔的观点。我们曾经在大学课程中构建了一个微码处理器。很好玩!
  • 思金和哈维尔是正确的。这应该是公认的答案。
  • 不应该是“低于机器码”而不是“高于机器码”吗?
  • 不是所有的处理器都有微码。无论如何,应该是:C -> assembly -> machine code -> microcode -> circuits -> atoms -> ?????
【解决方案2】:

Machine code。时间是程序员用二进制的 1 和 0 编码的。 Hex 被认为是在这方面的进步。那是在汇编之前,它使用代码的名称并将指令的各个部分分开。

【讨论】:

  • 机器码是Assembly的直接翻译,下面就不说了。
  • @marius,我的电脑可以运行机器代码,但不能运行汇编。所以它不相等;)。
  • 我不知道现在最先进的汇编程序可以做什么,但在过去,宏汇编程序可以为你做很多自动的东西(函数条目,跟踪参数计数,自动分配,条件宏扩展和其他整洁的东西,这是手动做的苦差事)。因此,出于某种原因,我会说机器代码“低于”汇编代码。
  • @Vatine,通用的汇编程序 GNU as 是从过去的美好时光倒退的一大步。任何手工组装过引导加载程序的人都会意识到,尽管指令助记符和指令之间存在很大程度的 1:1 映射,但汇编是比机器代码更高级别的抽象。
  • @Marius C代码生成机器码,就像Assembly汇编成机器码一样,所以你是说C和Assembly处于同一层次?
【解决方案3】:

Assembly 是机器码的文本表示。它有一条语句,表示 CPU 本身内的一条指令。例如,“MOV X, Y”是一条通过 CPU 并将值 X 移动到位置 Y 的单个指令。要获取机器代码,CPU 将有一个表示“MOV”的数字,以及一个表示'X'(如果它还不是一个数字)和一个代表 Y 的数字。这些原始 HEX 二进制值是机器代码。正是这些数字导致 CPU 通过晶体管引导电压/电流以使其发挥作用。

机器代码是一个较低的级别,但它非常接近于汇编。它是如此接近,由于能够读取指令“MOV” = move 的优势,没有人会打扰使用它。变量名也变得可读,而不是堆栈或堆中的原始地址。

【讨论】:

  • 嗯,许多汇编程序实际上允许使用标签来代替地址。所以汇编不仅仅是机器码的文本表示。
【解决方案4】:

再往下说,(不是“语言”这个词适用于“机器”语言或什至更低的物理层),但在机器语言之下是用于实际实现每一个的许多门和开关的配置所涉及的特定硬件 (CPU) 的二进制操作码... Charles Petzold 写的一本好书,涵盖了这个甚至更低的级别,名为“CODE

【讨论】:

    【解决方案5】:

    如果低于,你的意思是较低的水平,那么是的。有机器语言。汇编在运行之前被转换成机器语言。在许多现代流程中,机器语言是在微码中模拟的。有关微码的更多详细信息,请参阅this

    【讨论】:

      【解决方案6】:
      【解决方案7】:

      我认为你能得到的最低值是所谓的物理或 TRW(现实世界)。这就是芯片设计人员和制造商用来创建 CPU 和其他处理器的方法,这些处理器可以将计算机语言的输出转化为有价值的东西。

      【讨论】:

      • 史诗般的答案。不过应该是 TRW 的商标。
      【解决方案8】:

      取决于你问的原因。在汇编中没有什么是你不能通过其他方法做的。机器码只是完全相同数据的另一种表示。

      【讨论】:

      • 不是 100% 准确.. 您无法通过其他方法优化您的装配。我的意思是即使是 x*=2;在 c++ 中可能无法编译为最有效的程序集。 for 循环可能不使用 cx 注册表 (8086)。有些事情你只能在汇编中做......这就是为什么它仍然被用作一种语言(总和)
      • 其实有些事情甚至不能用汇编来完成。某些类型的自修改代码,或使用指令作为数据,反之亦然。 (在具有可变长度指令的 x86 上......可能性......)
      【解决方案9】:

      第一台计算机 (ENIAC) 使用硬接线,以便将一个计算的输出作为输入馈送到另一个计算。要运行另一个程序,您必须拔掉一些电缆并以不同的方式重新接线。

      【讨论】:

        【解决方案10】:

        汇编器被汇编器翻译成机器代码。您可以使用二进制编辑器编写它。 (哎哟!) CISC 计算机可以有微码,对芯片的各个部分进行排序(ALU、内存提取等)。通常,除了芯片制造商之外,没有人编写微码。

        【讨论】:

          【解决方案11】:

          嗯,正如其他人所提到的,还有机器语言。机器语言通常是您在汇编中编写的内容的一对一翻译,因此它与汇编代码处于同一抽象级别——只是更难手工编写。

          这也有例外,比如 MIPS 汇编语言提供的pseudo-instructions

          有,或者我应该说曾经甚至低于汇编/机器语言:microcode。现代逻辑晶体管预算就是这样,我怀疑微码正在失去其相关性。

          【讨论】:

          • 微码肯定还在;硬连线太难了,而且容易“出错”。
          【解决方案12】:

          嗯,你总是可以用二进制(或十六进制,或其他一些表示)编写代码。然后,您必须在脑海中计算跳跃偏移等。不建议。 ;)

          【讨论】:

          • 我已经用 6502 做到了。但我不认为输入十六进制代码可以被视为一种语言......我说的是十六进制! :-)
          【解决方案13】:

          有点。机器不读取汇编,它们读取“机器语言”,这是汇编转换成的。机器语言有“操作码”而不是汇编的助记符,而这些操作码通常只是二进制数据。机器代码通常不被认为是人类可读的。

          在 RISC 系统上,机器代码通常是汇编的直接翻译,但在 x86 系统上,尤其是,两者完全不同。

          【讨论】:

          • 实际上,在 x86 上它也是一个简单的翻译。你有没有其他的例子?
          【解决方案14】:

          当然:“机器码”,维基百科在关于汇编语言的文章 (http://en.wikipedia.org/wiki/Assembly_language) 中说:“实现了对特定 CPU 架构进行编程所需的数字机器码和其他常量的符号表示。 "

          【讨论】:

            【解决方案15】:

            即使在机器代码之下,也可以说是 VHDL - 芯片设计。您甚至不需要设计芯片来执行代码,只需立即将输入转换为输出。

            (不是说我是专家——我使用的是 C++)

            【讨论】:

            • 但是在构建芯片之后,您无法真正对其进行编程。所以我认为这并不重要。
            • 在 FPGA 上使用它时,它可重新编程的。不过,我不是专家:)
            【解决方案16】:

            汇编语言是编程语言大楼的底层,因为机器代码不是一种语言,因为它不涉及任何要遵循的语法规则。机器码可能是执行微处理器操作的唯一数据格式:CPU从内存中取出数据,根据取出的机器码直接执行指令。

            但是,在最近的一些设计中,例如 Intel Pentium 4 及更高版本,机器代码是较低级别 RISC 执行单元操作的表达,称为 uops 或微操作。因此,这些设计的解码逻辑是将 CISC 类型的指令转换为小微指令,这些指令通常针对更简单的加载/存储单元,类似 RISC。在这方面,我们可以说(尽管这在技术上可能不准确)机器代码描述了架构的“高级”复杂指令,而不是由 CPU 的底层执行逻辑原子地执行的“真实”操作.

            所以我们有一个架构指令集,或架构机器代码,以及一个对外部世界隐藏的内部级别“微指令”集。 Intel 处理器的跟踪缓存旨在存储此类操作,以优化处理器的超标量性能(因为 CPU 执行的是 uop,而不是可供程序执行的体系结构指令集)。

            【讨论】:

              【解决方案17】:

              您可以向 CPU 发送电流并告诉它在哪里放置像素。 (差不多是二进制,不过不用电脑写。)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-12-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-10-07
                • 1970-01-01
                • 2012-11-27
                相关资源
                最近更新 更多