我正在阅读英特尔处理器文档并同时编写一些基本的汇编代码 . 我的服务器上有 nasm 和 as (GAS),我理解两个汇编程序的基本区别 .
nasm
as
长期来说:
关注哪种语法更好?
这些语法有哪些优缺点?
哪一个被更广泛地使用和理解?
我也很感激您可以与我分享的任何偏好 .
取决于您的项目 . 并非每个编译器都允许这两种语法 . 如果你需要在其他平台上组装代码,那么英特尔可能会更好,即使经过几年的经验,我个人更喜欢英特尔,但这是一个小差异,对我来说并不重要 .
在AT&T语法中,如果需要使用宏,则会有更多 % ,甚至更多 . OTOH我更喜欢源,目的地排序,但那是个人品味,其他人可能更喜欢它,因为它类似于C中的赋值运算符的写入顺序(以及更多) .
%
我的INTEL语法是像 DWORD PTR 这样的猥亵,其中在AT&T中附加一个小的 l 就足够了 . 在许多情况下,助记符的确切拼写不同,我发现AT&T更合乎逻辑,当然英特尔方式是标准 . 英特尔的寻址模式更具可读性 .
DWORD PTR
l
我相信AT&T的使用更多,因为Linux在嵌入式平台上无处不在,其中汇编程序在其他软件项目中更常用 . 有更多的汇编程序可以理解Intels的语法,这很多都是正确的,但我相信gcc / gas更多地用于汇编程序很重要/有用的领域 .
无论你喜欢与谁合作
对我来说:优点: - 英特尔:可读 - AT&T:更多平台(因为'as'可在许多平台上使用)缺点: - 英特尔:许多汇编程序,但很少有常见的相似之处,许多功能都是汇编程序特定的 - AT&T:它添加/ - 对你的眼睛
AFAIK Intel语法被更广泛地使用 . 您可以查看支持Intel vs AT&T的汇编程序数量 .
2 回答
取决于您的项目 . 并非每个编译器都允许这两种语法 . 如果你需要在其他平台上组装代码,那么英特尔可能会更好,即使经过几年的经验,我个人更喜欢英特尔,但这是一个小差异,对我来说并不重要 .
在AT&T语法中,如果需要使用宏,则会有更多
%
,甚至更多 . OTOH我更喜欢源,目的地排序,但那是个人品味,其他人可能更喜欢它,因为它类似于C中的赋值运算符的写入顺序(以及更多) .我的INTEL语法是像
DWORD PTR
这样的猥亵,其中在AT&T中附加一个小的l
就足够了 . 在许多情况下,助记符的确切拼写不同,我发现AT&T更合乎逻辑,当然英特尔方式是标准 . 英特尔的寻址模式更具可读性 .我相信AT&T的使用更多,因为Linux在嵌入式平台上无处不在,其中汇编程序在其他软件项目中更常用 . 有更多的汇编程序可以理解Intels的语法,这很多都是正确的,但我相信gcc / gas更多地用于汇编程序很重要/有用的领域 .
无论你喜欢与谁合作
对我来说:优点: - 英特尔:可读 - AT&T:更多平台(因为'as'可在许多平台上使用)缺点: - 英特尔:许多汇编程序,但很少有常见的相似之处,许多功能都是汇编程序特定的 - AT&T:它添加/ - 对你的眼睛
AFAIK Intel语法被更广泛地使用 . 您可以查看支持Intel vs AT&T的汇编程序数量 .