Linux内核学习笔记-AT&T汇编语法

Linux内核-AT&T汇编语法


AT&T汇编与intel汇编的区别

1.寄存器引用

引用寄存器前要加%,mov %eax,%ebx

2.操作数的顺序

操作数的排列时从源(左)到目的(右),mov %eax,%ebx

3.常数、立即数的格式

立即数前要加$,mov $4,%eax

变量的直接引用如 mov value,%ebx

引用符号的地址在符号前加$ mov $value,%ebx

4.操作数的长度

操作数的长度用加载指令的符号表示

b,w,l,  如movw %ax,%bx

5.跳转和调用指令

AT&T中 jmp/call的操作数前要加上$作为前缀

intel 中直接操作数

6.远跳转和远调用

AT&T格式

ljmp $section,$offset

lcall $section,$offset

Intel格式

jmp far section:offset

call far section:offset

7.远程返回指令

AT&T格式 

Iret $stack_adjust

Intel格式

ret far stack_adjust

8.寻址方式

AT&T格式 section:disp(base,index,scale)

Intel格式 section:[base+index*scale+disp]

9.C语言中嵌入汇编

AT&T _asm_("asm statements":outputs:inputs:register-modified);



 80386的寄存器:




     80386的寄存器可以分为8组:通用寄存器,段寄存器,指令指针寄存器,标志寄存器,系统地址寄存器,控制寄存器,调试寄存器,测试寄存器,它们的宽度都是32位的。
     一. General Register(通用寄存器)
     EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,它们的低16位就是8086的AX,BX,CX,DX,SI,DI,SP,BP,它们的含义如下:
     EAX:累加器
     EBX:基址寄存器
     ECX:计数器
     EDX:数据寄存器
     ESI:源地址指针寄存器
     EDI:目的地址指针寄存器
     EBP:基址指针寄存器
     ESP:堆栈指针寄存器
     这些寄存器可以将低16位单独存取,也就是8086的AX,BX,CX,DX,SI,DI,SP,BP,在存取这些寄存器的低16位(AX,BX,CX,DX,SI,DI,SP,BP),它们的高16位不受影响,同时和8086一样对于AX,BX,CX,DX这四个寄存器来讲,可以单独存取它们的高8位和低8位(AH,AL,BH,BL,CH,CL,DH,DL)
    
     二. Segment Register(段寄存器)
        除了8086的4个段外(CS,DS,ES,SS),80386还增加了两个段FS,GS,这些段寄存器都是16位的,它们的含义如下:
     CS:代码段(Code Segment)
     DS:数据段(Data Segment)
     ES:附加数据段(Extra Segment)
     SS:堆栈段(Stack Segment)
     FS:附加段
     GS 附加段
    
    三. Instruction Pointer(指令指针寄存器)
     EIP,它的低16位就是8086的IP,它存储的是下一条要执行指令的地址。
    
    四. Flag Register(标志寄存器)
     EFLAGS,和8086的16位标志寄存器相比,增加了4个控制位,不过这4个控制位它们在实模下不起作,这四个控制位分别是:
    1. IOPL(I/O Privilege Level),I/O特权级字段,它的宽度为2bit,它指定了I/O指令的特权级。如果当前的特权级别在数值上小于或等于IOPL,那么I/O指令可执行。否则,将发生一个保护性异常。
    2. NT(Nested Task):控制中断返回指令IRET,它宽度为1位。NT=0,用堆栈中保存的值恢复EFLAGS,CS和EIP从而实现中断返回;NT=1,则通过任务切换实现中断返回。
    3. RF(Restart Flag):重启标志,它的宽度是1位。它主要控制是否接受调试故障。RF=0接受,RF=1忽略。如果你的程序每一条指令都被成功执行,那么RF会被清0。而当接受到一个非调试故障时,处理器置RF=1。
    4. VM(Virtual Machine):虚拟8086模式(用软件来模拟8086的模式,所以也称虚拟机)。VM=0,处理器工作在一般的保护模式下;VM=1,工作在V8086模式下。
    5. CF(Carry Flag):进位标志位,由CLC,STC两标志位来控制
    6. PF(Parity Flag):奇偶标志位
    7. AF(Assistant Flag):辅助进位标志位
    8. ZF(Zero Flag):零标志位
    9. SF(Singal Flag):符号标志位
    10.IF(Interrupt Flag):中断允许标志位,由CLI,STI两条指令来控制
    11.DF(Direction Flag):向量标志位,由CLD,STD两条指令来控制
    12.OF(Overflow Flag):溢出标志位。



    



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值