• 2019-2020-1 20199321《Linux内核原理与分析》第二周作业


    第一部分 基础知识

    寄存器的组成

    以16位的8086 CPU的寄存器为例,可分为三类。

    通用寄存器

    数据寄存器:AX(累加器),BX(基地址寄存器),CX(计数器寄存器),DX(数据寄存器)。均可当做两个独立的8位寄存器来使用。
    指针寄存器:SP(堆栈指针寄存器)、BP(基指针寄存器)
    变址寄存器:SI(源变址寄存器)、DI(目的变址寄存器)

    控制寄存器

    IP(指令指针寄存器),FLAG(标志寄存器)

    段寄存器

    CS(代码段寄存器),DS(数据段寄存器),SS(堆栈段寄存器),ES(附加段寄存器)

    在32位中,一般会在开头加E;在64位中,般会在开头加R。

    常用汇编指令

    末位是 b 指8位,末位是 w 指16位,末位是 l 指32位,末位是 q 指64位
    “从前往后看”
    寄存器寻址: movl %eax, %edx;
    立即寻址: movl $0x123, %edx;
    直接寻址: movl 0x123, %edx;
    间接寻址:movl (%eax), %edx;
    变址寻址:movl 4(%eax), %edx;(在原地址上加4)

    pushl %eax 相当于 subl $4, %esp; movl %eax, (%esp);
    popl %eax 相当于 movl (%esp), %eax; subl $4, %esp;

    第二部分 实验总结

    :wq命令在按“ESC”后输入;注意g / .s*/的输入

    实验分析

    leave指令用于撤销函数堆栈,相当于movl %ebp, %esp; popl %ebp;
    enter指令用于撤销函数堆栈,相当于pushl %ebp; movl %esp, %ebp;

    要理解代码的含义是什么,首先要知道ESP、EBP、EIP寄存器中要存储的内容是什么,结合在学习C语言时堆栈的理解来理解。

  • 相关阅读:
    项目管理和项目群管理的区别
    项目群管理
    PRINCE2如何完善PMBOK和您的PMP资格证书?
    为什么需要prince2项目管理方法论?
    PMP和PRINCE2到底有什么区别?哪个含金量更高?
    同步和异步
    Promise理解
    async和await实现异步的同步等待
    Mysql数据库操作基础步骤
    PHP和javascript区别
  • 原文地址:https://www.cnblogs.com/20199321zjy/p/11531377.html
Copyright © 2020-2023  润新知