寄存器、变量(常量)与立即数
在Intel汇编中,无论是寄存器、变量(常量)还是立即数,都是直接使用的,例如下列例子中分别加载一个变量(常量)与立即数到寄存器中:
mov eax, var ; var为已经定义好的变量(常量)
mov eax, 1234h
在AT&T汇编中,使用寄存器需要在其名称前增加%,例如使用eax寄存器,在AT&T汇编中为%eax。对于变量(常量)与立即数,在AT&T中使用需要加上$。
movl $var, %eax
movl $0x1234h, %eax
指令操作数顺序
在Intel汇编中,指令的格式为目标操作数在左,源操作数在右。而在AT&T汇编中,指令的格式为源操作数在左,目标操作数在右。
例如下面的例子中,将eax的值加载到ebx中,使用两个格式的汇编分别为:
movl %eax, %ebx ; AT&T
mov ebx, eax ; Intel
指令字长
在AT&T汇编中,需要在指令后使用后缀b、w、l、q表示操作数的字长,它们分别表示byte(8位)、word(16位)、longword(32位)与quadword(64位)。
下面的例子中,分别在不同位数的情况下,分别将al、ax、eax与<

本文探讨了Intel与AT&T汇编语言在寄存器使用、指令操作数顺序、指令字长和寻址方式上的差异。Intel汇编中,目标操作数在左,源操作数在右,而AT&T则是源操作数在左,目标操作数在右。在AT&T汇编中,使用寄存器需要在其名称前加%,内存寻址格式也与Intel有所不同。通过具体的指令和寻址方式示例,阐述了两者之间的语法区别。
最低0.47元/天 解锁文章
1470

被折叠的 条评论
为什么被折叠?



