我在学习汇编语言。我从PaulA.Carter的PC Assembly Language开始,它使用NASM ( Netwide )。然后在中间我切换并开始阅读使用MASM的Introduction to 80×86 Assembly Language and Computer Architecture。
在NASM中,我用来编写,用于初始化字节。
db 110101b
在MASM中我正在使用
字节1101b
我在看书。因为这些是汇编程序指令,所以对于每个汇编程序来说,它们是不同的。对吗?这些汇编程序开发人员不遵循这些指令的标准吗?因为,他们知道助记符是CPU特有的。所以,用汇编语言学习和编码是很痛苦的。
现在,如果它们遵循不同的指令,那么如果您更改汇编程序或切换操作系统(如果MASM开发人员使用linux,则会遇到很大的麻烦),这将更加痛苦。
我的困惑是,我应该熟悉NASM还是MASM?我是windows的粉丝,但我可能(将来)也必须在Linux上工作。
每本书都应该取名为“使用_________汇编程序的__________汇编语言”。
发布于 2010-01-03 16:51:26
不幸的是,汇编语言从来没有一个标准。您只需学习汇编程序支持的指令即可。幸运的是,大多数指令虽然有不同的名称,但在语义上是类似于db和字节的。
但是等等!情况会变得更糟,尤其是对x86来说。您(至少)有两种汇编程序可以接受的代码形式: Intel和AT&T格式。AT&T格式将大多数操作数的顺序颠倒到指令(或者是visa相反;-)。
NASM可能是一个更好的可移植性的选择,但您也可以查看GNU汇编程序。
发布于 2010-01-03 17:49:09
英特尔语法/ AT&T语法
特别是使用x86,最初的汇编程序来自英特尔,然后是微软的基本兼容的汇编程序组成了一个分支。
这些汇编程序将源操作数和目标操作数从左到右组织,并有一个不寻常的抽象层(在我看来,有点古怪),它使用单个助记符对8、16和32位操作数,然后根据操作数的属性导出实际的机器操作码。修饰符存在(在操作数上)以强制特定大小。
但是Unix也很重要,它有一个完全不同的汇编程序系列,具有不同的传统和惯例。
最初的Unix供应商是AT&T,它拥有贝尔实验室开发的知识产权。一系列的BSD项目,然后Linux继续这一传统。这些汇编程序历来从左到右处理操作数,有一个为速度而优化的备用设计,当人类使用时,它们通常使用cpp来处理宏和条件,即使汇编程序也具有并行特性。
这些天,您可能会在MS上使用VS,在Linux或Mac上使用Gnu,但这就是为什么我们仍然说AT&T对Intel。GNU汇编程序可以选择两种方式进行组装,尽管它仍然处于AT&T阵营。
发布于 2010-01-03 16:51:46
一般是的。不过,它们大多与特性兼容,因此,如果您了解这两种语言,那么从一种汇编程序语法转换到另一种汇编程序语法通常并不十分困难。
https://stackoverflow.com/questions/1995472
复制相似问题