是否有任何语言直接与硬件对话并且不是汇编?

Óla*_*age 2 assembly programming-languages

只是想知道汇编世界是如何工作的,我正在阅读维基上的汇编语言,这句话让我印象深刻:

它实现了编程特定CPU架构所需的数字机器代码和其他常量的符号表示.

我一直认为汇编是一种基于CPU的固定语言(使用基于所述CPU的不同编译器和语言),因此对于您的CPU,您只能使用这种类型的汇编来与您的硬件通信.

但基于该引用,可能有其他语言使用其他符号来表示相同的数字机器代码.

那么,有没有其他语言可以直接与不是汇编的硬件对话?或者我弄错了?

Ste*_*sop 7

可以使用一组不同的符号来表示机器代码.但没有人会烦恼,因为你不会获得太多收益.

ARM有一条名为ADD的指令.在ARM汇编程序中,"ADD r0,r0,#1"表示构成增加寄存器0的指令的4字节机器代码.

无论您将该指令称为什么,都无法更改可用的指令集,仍称其为ARM汇编程序.无论您将ADD操作称为"ADD","SUM","PLUS"还是"ADDITION",它仍然基本上是相同的编程语言.因为如果每个人都使用相同的名称来使用现有的引用更容易,那就是会发生什么.

一个有用的变化可能是将指令表示为"INC r0",因为ARM没有INC指令,这是一个常见的操作.这导致汇编语言中的宏.这些确实改变了语言,但是一旦你有发出多个ARM指令的宏,你开始失去汇编的所见即所得的性质.最后你开始认为也许你可能只是写C.我从经验中说话(它不是ARM,但它是一个宏观的汇编程序).

一个常见的区别是 - 如果你觉得自己很迂腐,你可以说有两种不同版本的ARM汇编语言,一种是大写的,一种是小写的(或者说有一种语言,同一种情况有多个符号) .同一机器代码的不同反汇编器有时会输出不同的格式.有时这些是不同的,特定的汇编程序将无法处理所有这些,或者汇编程序将提供它们自己的便利,这些便利与同一平台上的另一个汇编程序不兼容.但实际上,这一切都是一样的,如果你想要区分它,那通常是因为你被咬了屁股而不是因为发生了什么好事......


小智 5

你弄错了(或者可能是对的——很难从你的问题中看出)。汇编语言是特定 CP 架构的指令二进制模式的符号(易于人类阅读)表示。人们偶尔会遇到对“portabe 汇编器”(Scott Nudds,有人吗?)的引用,但这些确实是稍微高级一点的语言。