- 主题:大厂汇编+GNU AS 通用汇编语言是真相,Intel的二元论就是胡说
似乎有两个汇编语言……一个是各种大厂商维护的,并且跟国内的汇编语言教科书即dos x86基本兼容的汇编,搜索引擎出来的结果也是这个汇编,这个汇编除了windows平台相关,似乎看不到什么人还在用来开发新东西了……
还有一个汇编是在 gnu binunits as 那里定义的汇编,这个汇编其实是裁剪了很多不同的处理器的汇编,变成了某种 common assembly 那种东西,似乎可以看成许多种处理器的汇编语言的并集的一个子集定义,但又有gnu加进去的东西。。他们有一个统一的手册可以在官网查到的。。linux那些汇编,还有各种看到的开源的汇编,实际上走是这个汇编。。
基本上可以认为那种"不同的处理器的汇编语言是不同的"已经是不对的了,对了一部分,但不全对。。在实践中,gnu as已经定义出了一种"通用的汇编"。。似乎可以认为linux就是用这种汇编写的。。(还有其他的东西)
https://sourceware.org/binutils/docs-2.37/
https://sourceware.org/binutils/docs-2.37/as.html
参考 Using as 3-9 章
。。。而且,“GNU AS 通用汇编语言”还不是封闭的,随着新的处理器出来,还可能会整合这种新的处理器的汇编进去,不断增长……
我的论据如下:
一个语言(非自然语言,人工语言,或者说已经被规范化了的语言)的确定并不在某个大厂或者某个不知名的人怎么说这个语言是什么,而在于这个语言如何被形式化,并且通常会形成了形式化的说明。
这种形式化的声明并不是诸如“汇编语言是……。”这样一句话,这还少,不足以完全确定一门语言的面目。具体的可以看各种语言标准。
GNU AS的文档已经完成了一种通用的对不同的机器上的汇编语言的形式化。而所谓的有两种语法,一种是……,一种是……。这没有任何的实践上的现实效力,也没有任何科学意义。逻辑上又叫“循环论证”。
我们把 GNU AS 汇编的一些目录摘抄如下(不代表我对这门语言的肯定):
3 Syntax
3.1 Preprocessing
3.2 Whitespace
3.3 Comments
3.4 Symbols
3.5 Statements
3.6 Constants
3.6.1 Character Constants
3.6.1.1 Strings
3.6.1.2 Characters
3.6.2 Number Constants
3.6.2.1 Integers
3.6.2.2 Bignums
3.6.2.3 Flonums
4 Sections and Relocation
4.1 Background
4.2 Linker Sections
4.3 Assembler Internal Sections
4.4 Sub-Sections
4.5 bss Section
5 Symbols
5.1 Labels
5.2 Giving Symbols Other Values
5.3 Symbol Names
5.4 The Special Dot Symbol
5.5 Symbol Attributes
5.5.1 Value
5.5.2 Type
5.5.3 Symbol Attributes: a.out
5.5.3.1 Descriptor
5.5.3.2 Other
5.5.4 Symbol Attributes for COFF
5.5.4.1 Primary Attributes
5.5.4.2 Auxiliary Attributes
5.5.5 Symbol Attributes for SOM
6 Expressions
6.1 Empty Expressions
6.2 Integer Expressions
6.2.1 Arguments
6.2.2 Operators
6.2.3 Prefix Operator
6.2.4 Infix Operators
7 Assembler Directives
。。。
8 Object Attributes
8.1 GNU Object Attributes
8.1.1 Common GNU attributes
8.1.2 M680x0 Attributes
8.1.3 MIPS Attributes
8.1.4 PowerPC Attributes
8.1.5 IBM z Systems Attributes
8.1.6 MSP430 Attributes
8.2 Defining New Object Attributes
9 Machine Dependent Features
。。。
--
修改:darkk FROM 202.108.53.*
FROM 106.39.25.*
MS用的叫Intel汇编,Linux用的叫AT&T汇编
Intel的指令手册就是这么写的
【 在 darkk (darkk体国经野 义尚光大) 的大作中提到: 】
: 似乎有两个汇编语言……一个是各种大厂商维护的,并且跟国内的汇编语言教科书即dos x86基本兼容的汇编,搜索引擎出来的结果也是这个汇编,这个汇编除了windows平台相关,似乎看不到什么人还在用来开发新东西了……
: 还有一个汇编是在 gnu binunits as 那里定义的汇编,这个汇编其实是裁剪了很多不同的处理器的汇编,变成了某种 common assembly 那种东西,似乎可以看成许多种处理器的汇编语言的并集的一个子集定义,但又有gnu加进去的东西。。他们有一个统一的手册可以在官网查到的。
: 基本上可以认为那种"不同的处理器的汇编语言是不同的"已经是不对的了,对了一部分,但不全对。。在实践中,gnu as已经定义出了一种"通用的汇编"。。似乎可以认为linux就是用这种汇编写的。。(还有其他的东西)
: ...................
--
FROM 27.91.71.*
本来就是跟着编译器走的,这有啥好奇怪的
还以为x86跟arm riscv mips统一了呢
--
FROM 111.198.57.*
最早的时候,汇编器和指令手册是硬件的附属品,硬件厂商用什么,什么就成了事实标准
【 在 eggcar (eggcar) 的大作中提到: 】
: 本来就是跟着编译器走的,这有啥好奇怪的
: 还以为x86跟arm riscv mips统一了呢
--
FROM 27.91.71.*
你也说了是最早的时候了
现在谁还会再为自家cpu搞一套专门的汇编语法出来?不都是要靠编译器的大树
然鹅指令又不通用,光语法通用,也就是方便了编译器维护,降低了一丢丢使用门槛,asm代码又不能移植
【 在 xiaoju 的大作中提到: 】
: 最早的时候,汇编器和指令手册是硬件的附属品,硬件厂商用什么,什么就成了事实标准
:
--
FROM 111.198.57.*
现在流行统一的写法主要是因为开源了,软件维护者不愿意支持几百种汇编语法,闭源软件的话就无所谓,反正汇编器是人家写好了的
【 在 eggcar (eggcar) 的大作中提到: 】
: 你也说了是最早的时候了
: 现在谁还会再为自家cpu搞一套专门的汇编语法出来?不都是要靠编译器的大树
: 然鹅指令又不通用,光语法通用,也就是方便了编译器维护,降低了一丢丢使用门槛,asm代码又不能移植
: ...................
--
FROM 27.91.71.*
他们胡说的
【 在 xiaoju 的大作中提到: 】
: MS用的叫Intel汇编,Linux用的叫AT&T汇编
: Intel的指令手册就是这么写的
:
--
FROM 117.136.38.*
就是统一了,虽然差异还在
【 在 eggcar 的大作中提到: 】
: 本来就是跟着编译器走的,这有啥好奇怪的
: 还以为x86跟arm riscv mips统一了呢
--
FROM 117.136.38.*
喷了 谁给这个帖子加的精?整个胡说八道
你写过程序没?能分清 syntax 和 semantics 的区别吗?你肯定没写过汇编,估计也没读过吧?搞得懂 inline asm 跟 asm 的区别吗?知道后端是怎么 lower 跟 emit 的吗?为什么各种架构都用一样的 codegen 来描述,你明白不?能分清 compiler 跟 assembler 吗?各种架构的手册读过几页?居然如此自大说 intel 手册胡说。 Linux/win 是用汇编写的,这是九十年代初民智未开的时候流行的谬论,你现在重新发现了一遍。
【 在 darkk 的大作中提到: 】
: 他们胡说的 ...
--
FROM 178.55.74.*
xiaoju 这次没说错。两种汇编的语法就是这么叫的。
你的理解差不多对。目前主流的汇编语法,注意是语法,就是这两种。但嵌入式还有远古的机器可能会有自己的汇编语法与指令。
【 在 darkk (darkk体国经野 义尚光大) 的大作中提到: 】
: 他们胡说的
--
FROM 110.81.13.*