【发布时间】:2010-09-20 22:38:18
【问题描述】:
是否有“低于”汇编的编程语言?
【问题讨论】:
-
youtu.be/j9I2KfGKv4M 是关于指令集架构和微架构区别的好讲座
-
机器码下面的语言是用于编写硬件的逻辑,可能是 Verilog 或 VHDL(可能介于两者之间的模微码。)
标签: assembly machine-code microcoding
是否有“低于”汇编的编程语言?
【问题讨论】:
标签: assembly machine-code microcoding
实际上在机器码下面有一层代码,称为Microcode。
【讨论】:
C -> assembly -> machine code -> microcode -> circuits -> atoms -> ?????
Machine code。时间是程序员用二进制的 1 和 0 编码的。 Hex 被认为是在这方面的进步。那是在汇编之前,它使用代码的名称并将指令的各个部分分开。
【讨论】:
Assembly 是机器码的文本表示。它有一条语句,表示 CPU 本身内的一条指令。例如,“MOV X, Y”是一条通过 CPU 并将值 X 移动到位置 Y 的单个指令。要获取机器代码,CPU 将有一个表示“MOV”的数字,以及一个表示'X'(如果它还不是一个数字)和一个代表 Y 的数字。这些原始 HEX 二进制值是机器代码。正是这些数字导致 CPU 通过晶体管引导电压/电流以使其发挥作用。
机器代码是一个较低的级别,但它非常接近于汇编。它是如此接近,由于能够读取指令“MOV” = move 的优势,没有人会打扰使用它。变量名也变得可读,而不是堆栈或堆中的原始地址。
【讨论】:
再往下说,(不是“语言”这个词适用于“机器”语言或什至更低的物理层),但在机器语言之下是用于实际实现每一个的许多门和开关的配置所涉及的特定硬件 (CPU) 的二进制操作码... Charles Petzold 写的一本好书,涵盖了这个甚至更低的级别,名为“CODE”
【讨论】:
如果低于,你的意思是较低的水平,那么是的。有机器语言。汇编在运行之前被转换成机器语言。在许多现代流程中,机器语言是在微码中模拟的。有关微码的更多详细信息,请参阅this。
【讨论】:
我认为你能得到的最低值是所谓的物理或 TRW(现实世界)。这就是芯片设计人员和制造商用来创建 CPU 和其他处理器的方法,这些处理器可以将计算机语言的输出转化为有价值的东西。
【讨论】:
取决于你问的原因。在汇编中没有什么是你不能通过其他方法做的。机器码只是完全相同数据的另一种表示。
【讨论】:
第一台计算机 (ENIAC) 使用硬接线,以便将一个计算的输出作为输入馈送到另一个计算。要运行另一个程序,您必须拔掉一些电缆并以不同的方式重新接线。
【讨论】:
汇编器被汇编器翻译成机器代码。您可以使用二进制编辑器编写它。 (哎哟!) CISC 计算机可以有微码,对芯片的各个部分进行排序(ALU、内存提取等)。通常,除了芯片制造商之外,没有人编写微码。
【讨论】:
嗯,正如其他人所提到的,还有机器语言。机器语言通常是您在汇编中编写的内容的一对一翻译,因此它与汇编代码处于同一抽象级别——只是更难手工编写。
这也有例外,比如 MIPS 汇编语言提供的pseudo-instructions。
有,或者我应该说曾经甚至低于汇编/机器语言:microcode。现代逻辑晶体管预算就是这样,我怀疑微码正在失去其相关性。
【讨论】:
嗯,你总是可以用二进制(或十六进制,或其他一些表示)编写代码。然后,您必须在脑海中计算跳跃偏移等。不建议。 ;)
【讨论】:
有点。机器不读取汇编,它们读取“机器语言”,这是汇编转换成的。机器语言有“操作码”而不是汇编的助记符,而这些操作码通常只是二进制数据。机器代码通常不被认为是人类可读的。
在 RISC 系统上,机器代码通常是汇编的直接翻译,但在 x86 系统上,尤其是,两者完全不同。
【讨论】:
当然:“机器码”,维基百科在关于汇编语言的文章 (http://en.wikipedia.org/wiki/Assembly_language) 中说:“实现了对特定 CPU 架构进行编程所需的数字机器码和其他常量的符号表示。 "
【讨论】:
即使在机器代码之下,也可以说是 VHDL - 芯片设计。您甚至不需要设计芯片来执行代码,只需立即将输入转换为输出。
(不是说我是专家——我使用的是 C++)
【讨论】:
汇编语言是编程语言大楼的底层,因为机器代码不是一种语言,因为它不涉及任何要遵循的语法规则。机器码可能是执行微处理器操作的唯一数据格式:CPU从内存中取出数据,根据取出的机器码直接执行指令。
但是,在最近的一些设计中,例如 Intel Pentium 4 及更高版本,机器代码是较低级别 RISC 执行单元操作的表达,称为 uops 或微操作。因此,这些设计的解码逻辑是将 CISC 类型的指令转换为小微指令,这些指令通常针对更简单的加载/存储单元,类似 RISC。在这方面,我们可以说(尽管这在技术上可能不准确)机器代码描述了架构的“高级”复杂指令,而不是由 CPU 的底层执行逻辑原子地执行的“真实”操作.
所以我们有一个架构指令集,或架构机器代码,以及一个对外部世界隐藏的内部级别“微指令”集。 Intel 处理器的跟踪缓存旨在存储此类操作,以优化处理器的超标量性能(因为 CPU 执行的是 uop,而不是可供程序执行的体系结构指令集)。
【讨论】:
您可以向 CPU 发送电流并告诉它在哪里放置像素。 (差不多是二进制,不过不用电脑写。)
【讨论】: