美文网首页
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)基本概念

    1、AT&T汇编 vs Intel汇编 基于x86架构的处理器所使用的汇编指令一般有2种格式a) Intel汇编D...

  • 6.828 操作系统 lab1: 阅读boot.S

    补充知识 补充1. AT&T汇编 由于内核代码采用的gcc编译器使用AT&T的汇编格式,首先补充下关于AT&T汇编...

  • 内联汇编

    AT&T汇编语法 GCC只支持AT&T汇编语法内嵌在C语言中。 Intel和AT&T汇编风格对比: AT&T寻址 ...

  • AT&T Assembly Syntax [ AT&T 汇编语法

    AT&T Assembly Syntax [ AT&T 汇编语法 ] vivek, Mon, 2003-09-01...

  • AT&T汇编-函数实例

    AT&T 基于x86架构处理器汇编指令一般有2种格式:Intel汇编和AT&T汇编,通过对8086汇编的学习包括对...

  • lab1 二进制炸弹

    汇编与反汇编 汇编与反汇编的区别 phase_1 比较字符串是否相同 二进制炸弹 常见汇编指令详解 AT&T 格式...

  • 汇编at&t

    比较得到数组最大数 写一个比较得到最大数的汇编, 注意: long是4字节 movl, mov运用在不同范围的数字...

  • 18本Linux系统和驱动开发相关电子书资源

    1 《GCC内嵌汇编及AT&T汇编语法》 2 《ARM嵌入式系统基础教程》 3 《无界面linux文件系统的制作》...

  • 寄存器的一点小知识

    汇编语言的种类 Intel:WindowsAT&T:Unix AT&T汇编主要用作iOS模拟器ARM汇编用于iOS...

  • AT&T汇编(2)反汇编

    1、常见代码反汇编 sizeof a++ + a++ + a++ if-else for switch和if效率 ...

网友评论

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

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