zoukankan      html  css  js  c++  java
  • x86汇编

    memory holds instructions and data

    CPU interpreter of instructions

    EIP is incremented after each instruction

    instruction are different length

    EIP modified by CALL, RET, JMP, and conditional JMP

    Registers for work space

    eax 累加器(Accumulator)

    ebs 基地址寄存器 Base Registers

    ecx 计数寄存器 count Registers

    edx 数据寄存器 data registers

    ebp 堆栈基指针 base pointer

    esi  edi 变址寄存器 index register

    esp 堆栈顶指针 stack pointer

    movl %eax, %edx         edx=eax;     register mode

    movl $0x123, %edx       edx=0x123;  immediate

    注:立即数是以$开头的数值

    movl 0x123, %edx        edx=*(int32_t*)0x123; direct

    注:直接寻址:直接访问一个指定的内存地址的数据;

    movl (%ebx), %edx      edx=*(int32_t*)ebx; indirect

    注:间接寻址:将寄存器的的值作为一个内存地址来访问内存。

    movl 4(%ebx), %edx    edx=*(int32_t*)(ebx+4); displace

    注:变址寻址:在间接寻址之时改变寄存器的数值

    stack memory + operations

    push %eax    等价于  subl $4, %esp    movl %eax, (%esp)

    esp向下移一个位; eax的值存放到esp所指向的地址空间

    pop %eax      等价于 movl (%esp), %eax  add $4, %esp

    将esp所指向地址的数值传递给eax,同时esp向上移一位

    call 0x12345   等价于 pushl %eip(*)   movl $0x12345, %eip(*)

    将eip入栈,同时 将立即数赋给eip。

    ret   等价于 popl %eip(*)  将之前的eip的数值还给eip。

    eip寄存器不能被直接修改,只能通过特殊指令间接修改。

  • 相关阅读:
    实验10:Problem D: STL——管道二
    实验10:Problem C: STL——呵呵型自动机
    实验10:Problem B: STL——哈哈型自动机
    实验10:Problem A: STL——整理唱片
    实验9:Problem I: 学生干部虚基类
    hihocoder1994 树与落叶 DFS+前缀和+二分
    [Offer收割]编程练习赛108
    【模板】左偏树(可并堆)
    P2993 [FJOI2014]最短路径树问题 点分治+最短路
    E
  • 原文地址:https://www.cnblogs.com/passion-hzhang/p/6275694.html
Copyright © 2011-2022 走看看