美文网首页
AT&T汇编(1)基本概念

AT&T汇编(1)基本概念

作者: 迷心迷 | 来源:发表于2019-03-29 12:35 被阅读0次

    1、AT&T汇编 vs Intel汇编

    • 基于x86架构的处理器所使用的汇编指令一般有2种格式
      a) Intel汇编
      DOS(8086处理器)、Windows
      Windows派系 --> VC编译器

      b)AT&T汇编
      Linux、Unix、Mac OS、iOS(模拟器)
      Unix派系 --> GCC编译器

    • AT&T读作 "AT and T" (American Telephone & Telegraph)

    • 作为iOS开发工程师,最主要的汇编语言是
      AT&T汇编 --> iOS模拟器
      ARM汇编 --> iOS真机设备

    1.png

    2、AT&T汇编 vs Intel汇编寻址方式

    2.png

    3、64位AT&T汇编的寄存器

    • 有16个常用64位寄存器
      %rax、%rbx、%rcx、%rdx、%rsi、%rdi、%rbp、%rsp
      %r8、%r9、%r10、%r11、%r12、%r13、%r14、%r15

    • 寄存器的具体用途
      %rax作为函数返回值使用
      %rsp指向栈顶
      %rdi、%rsi、%rdx、%rcx、%8、%r9、%r10等寄存器作为存放函数参数

    3.png

    3、64位AT&T汇编 -- 栈帧

    4.png
    5.png 6.png 7.png

    // 叶子函数:函数内部没有再调用其他函数
    // 叶子函数不会减rsp来分配空间给局部变量
    
    void test()
    {
    
    }
    
    int sum(int a, int b)
    {
        int c = a + b;
        int d = c + 10;
        test();
        return d;
    }
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            NSLog(@"%d", sum(1, 2));
        }
        return 0;
    }
    
    /**
    0x100000ef0 <+0>:  pushq  %rbp
     0x100000ef1 <+1>:  movq   %rsp, %rbp
     
     0x100000ef4 <+4>:  movl   %edi, -0x4(%rbp)
     0x100000ef7 <+7>:  movl   %esi, -0x8(%rbp)
     0x100000efa <+10>: movl   -0x4(%rbp), %esi
     0x100000efd <+13>: addl   -0x8(%rbp), %esi
     0x100000f00 <+16>: movl   %esi, -0xc(%rbp)
     0x100000f03 <+19>: movl   -0xc(%rbp), %esi
     0x100000f06 <+22>: addl   $0xa, %esi
     0x100000f09 <+25>: movl   %esi, -0x10(%rbp)
     0x100000f0c <+28>: movl   -0x10(%rbp), %eax
     
     
     0x100000f0f <+31>: popq   %rbp
     0x100000f10 <+32>: retq
     
     ---------------------------------
    
     0x100000ef0 <+0>:  pushq  %rbp
     0x100000ef1 <+1>:  movq   %rsp, %rbp
     0x100000ef4 <+4>:  subq   $0x10, %rsp
     
     0x100000ef8 <+8>:  movl   %edi, -0x4(%rbp)
     0x100000efb <+11>: movl   %esi, -0x8(%rbp)
     0x100000efe <+14>: movl   -0x4(%rbp), %esi
     0x100000f01 <+17>: addl   -0x8(%rbp), %esi
     0x100000f04 <+20>: movl   %esi, -0xc(%rbp)
     0x100000f07 <+23>: movl   -0xc(%rbp), %esi
     0x100000f0a <+26>: addl   $0xa, %esi
     0x100000f0d <+29>: movl   %esi, -0x10(%rbp)
     0x100000f10 <+32>: callq  0x100000ee0               ; test at main.m:15
     0x100000f15 <+37>: movl   -0x10(%rbp), %eax
     
     
     0x100000f18 <+40>: addq   $0x10, %rsp
     0x100000f1c <+44>: popq   %rbp
     0x100000f1d <+45>: retq
     
    */
    
    

    相关文章

      网友评论

          本文标题:AT&T汇编(1)基本概念

          本文链接:https://www.haomeiwen.com/subject/fzhlbqtx.html