汇编语⾔的Intel格式和ATT格式
汇编语⾔的种类
汇编语⾔和CPU息息相关,但是不能把汇编语⾔完全等同于CPU的机器指令。不同架构的CPU指令并不相同,如x86,powerpc,arm各有各的指令系统;甚⾄同⼀种架构的CPU有⼏套指令集,典型的如arm除了有32位的指令集外,还有⼀套16位的thumb指令集。但是作为开发语⾔的汇编,本质上是⼀套语法规则和助记符的集合,它可以包容不同的指令集。如果从CPU体系来划分,常见的汇编有两种:IBM PC汇编和ARM汇编。
IBM PC汇编也就是Intel的汇编,因为IBM 最早推出PC机,后来的体系很多都要和它兼容,所以也使⽤了相同的汇编语⾔。ARM压根没考虑过兼容,它的指令集和x86完全是两个体系,所以汇编语⾔也独⽴发展出⼀套。汇编语言如何编程
CPU只是限定了机器码,作为开发语⾔的汇编,其实还和编译器息息相关。汇编语⾔出现的早,没有像C语⾔⼀样定义出标准,所以编译器的⼚商各搞⼀套。到现在,最有名的也是两家:MASM和GNU ASM。前者是微软的,只⽀持x86,⽤在DOS/Windows平台中;后者是开源产品,主要⽤在Linux中,基本上⽀持⼤部分的CPU架构。这两者的区别在于伪指令的不同,伪指令是⽤来告诉编译器如何⼯作的,和编译器相关,和CPU⽆关。其实汇编的编译相当简单,这两套伪指令只是符号不相同,含义是⼤
同⼩异,明⽩了⼀种,看另⼀种就很容易了。
从汇编格式分,还有Intel格式和AT&T格式的区别,前者是Intel的,windows平台常见,后者最早由贝尔实验室推出,⽤于Unix中,GUN 汇编器的缺省格式就是AT&T。不过GNU的汇编器和调试器gdb对这两种格式都⽀持,可以随便切换。MASM只⽀持Intel格式。Intel格式和AT&T格式的区别只是符号系统的区别,这与x86和arm的区别可不⼀样,后者是CPU体系的区别。
最后谈谈内嵌汇编,它是⽤于C语⾔和汇编语⾔混合编程的,所以和编译器也关系紧密,⽬前也是有两种,GNU的内嵌汇编和MASM的内嵌汇编,它们的语法和普通汇编是有区别的,特别是GNU的内嵌汇编不是很容易看懂,需要专门学习才⾏。MASM的内嵌汇编和普通汇编的区别则不⼤。
参考⽂件《ARM汇编语⾔官⽅⼿册》

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。