美文网首页
汇编基础

汇编基础

作者: 夜凉听风雨 | 来源:发表于2022-03-30 21:18 被阅读0次

    编程语言的发展

    • 机器语言
      由0和1组成

    • 汇编语言( Assembly Language )
      用符号代替了0和1 ,比机器语言便于阅读和记忆

    • 高级语言
      C\C+ +\Java\JavaScript\Python等,更接近人类自然语言

    • 操作:将寄存器BX的内容送入寄存器AX
      1、机器语言: 1000100111011000
      2、汇编语言: movw %bx, %ax
      3、高级语言: ax= bx;

    图片.png
    • 汇编语言与机器语言一一对应,每一条机器指令都有与之对应的汇编指令

    • 汇编语言可以通过编译得到机器语言,机器语言可以通过反汇编得到汇编语言

    • 高级语言可以通过编译得到汇编语言\机器语言,但汇编语言机器语言几乎不可能还原成高级语言

    • 汇编语言的种类:
      1、8086汇编 (16bit)
      2、x86汇编(32bit)
      3、x64汇编(64bit)
      4、ARM汇编(嵌入式、移动设备)
      5、.......

    • x86、 x64汇编根据编译器的不同,有2种书写格式
      1、Intel : Windows派系
      2、AT&T : Unix派系

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

    常见汇编指令

    图片.png

    AT&T汇编和Intel汇编语法虽然有些不同,但是看起来还是挺接近的。
    AT&T汇编指令后面跟的b、s、w、l、q、t等字母表示的是操作数长度,b=1字节,s=2字节或4字节,w=2字节,l=4字节或8字节,q=8字节,t=10字节

    寄存器

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

    • 寄存器大小
      1、r开头的寄存器都是64位8字节的
      2、e开头的寄存器是32位4字节的
      3、ax、bx、cx寄存器都是16位2字节的
      4、l和h结尾的结存器是8位1字节的

    • 寄存器的具体用途
      1、%rax、%rdx常作为函数返回值使用
      2、%rdi、 %rsi、 %rdx、 %rcx、 %r8、 %r9等寄存器常用于存放函数参数,当函数参数过多寄存器不够用的时候,就把参数存放在栈空间,紧挨着函数。
      3、%rsp、 %rbp用于栈操作

    寄存器的兼容性

    寄存器兼容.png
    • 64位的寄存器会将自己的一半低0-31位用来作为32位寄存器
    • 64位的寄存器会将自己的一半的一半低0-15位用来作为16位寄存器
    • 64位的寄存器会将自己的0-7位用来作为低8位寄存器,8-15位用来作为高8位寄存器

    规律

    • 内存地址格式为: 0x4bdc(%rip) , 一般是全局变量,全局区(数据段)
    • 内存地址格式为: -0x78(%rbp) , 一般是局部变量,栈空间
    • 内存地址格式为: 0x10(%rax) ,一般是堆空间

    相关文章

      网友评论

          本文标题:汇编基础

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