汇编:AT&T与NASM的区别

寄存器:

通用寄存器:EAX,EBX,ECX,EDX,  用于操作数据;

AX,BX,CX,DX,寄存器的16位版本;

AH,BH,CH,DH,AL,BL,CL,DL寄存器的8位高位和低位字节;

段寄存器:CS,SS,DS,ES,FS,GS,16位寄存器,存放着,内存地址的前半部分;存放着指向代码,栈和额外数据段的指针

偏移寄存器:EBP,指向函数的本地环境的起始位置; ESI,存放着使用内存块的操作中的源数据的偏移

EDI,存放着使用内存块的操作中目的数据偏移; ESP,指向栈顶的指针;

特殊寄存器:EFLAGS标志寄存器.CPU用来跟踪逻辑结果和处理器的状态;

EIP 指向要执行的下一条指令的地址

AT&T:

主要由GNU汇编器,gcc编译器条件中,Linux通常会使用这种形式.

NASM:

NASM格式许多用于windows汇编器和调试器.

这两种生成机器语言是完全一样的,只是在风格上存在一些差异;

语法格式:

NASM语法 mov eax,51h;   AT&T语法:Movl $51h, %eax;

NASM是前面是寄存器,后面是数据,AT&T是数据在前数据,后面是寄存器;

AT&T在寄存器前面使用%符号,NASM不需要.

AT&T数据前面使用$符号,NASM不需要.

AT&T处理内存引用的方式与NASM不同.

猜你喜欢

转载自blog.csdn.net/freegotocpp/article/details/81910237
今日推荐