zoukankan      html  css  js  c++  java
  • 2019-2020-1 20199328《Linux内核原理与分析》第二周作业

    冯诺依曼体系结构的核心是:
    冯诺依曼体系结构五大部分:控制器,运算器,存储器,输入输出设备。

    常用的寄存器

    AX、BX、CX、DX一般存放一些一般的数据,被称为通用寄存器,分别拥有高8位和低8位。

    段寄存器

    段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。
    段寄存器SS指向用于堆栈的内存段,SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元。另外,当偏移量用到了指针寄存器BP,则其缺省的段寄存器也是SS,并且用BP可访问整个堆栈,不仅仅是只访问栈顶。
    段寄存器DS指向数据段,ES指向附加段,在存取操作数时,二者之一和一个偏移量合并就可得到存储单元的物理地址。该偏移量可以是具体数值、符号地址和指针寄存器的值等之一,具体情况将由指令的寻址方式来决定。

    寻址方法 :寄存器寻址,立即寻址,直接寻址,间接寻址,变址寻址

    立即寻址
    指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。如:MOV AX,#5678H 注意:立即数只能作为源操作数,不能作为目的操作数。
    直接寻址
    直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址 。
    间接寻址
    间接寻址是相对直接寻址而言的,在间接寻址的情况下,指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器,或者说此形式地址单元的内容才是操作数的有效地址。
    寄存器寻址方式和寄存器间接寻址方式
    当操作数不放在内存中,而是放在CPU的通用寄存器中时,可采用寄存器寻址方式。显然,此时指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号(可以是8位也可以是16位(AX,BX,CX,DX))。指令结构中的RR型指令,就是采用寄存器寻址方式的例子。如:MOV DS,AX
    寄存器间接寻址方式与寄存器寻址方式的区别在于:指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。

    另外的一些常见命令

    应注意堆栈是向下增长的,EIP寄存器不可以直接修改,必须通过特殊指令

    实验部分 (路径是shiyanlou/Code)

    先利用 vi main.c 而后进行编辑

    其中,编辑完成时需要用保存并退出,这里开始时一直不太会,后来在网上查找资料,发现需要按下esc键,然后按下"SHIFT"+":",在输入wq表示保存并退出,最后按enter键返回上一个界面。

    接下来编译成汇编代码命令如图,编译成32位的汇编程序

    查看main.s会发现有许多以.开头的文件,这些都是用于链接的辅助信息,不会执行

    为是代码更加简洁,使用g/.s*/d命令删去这些辅助信息

    最后生成后的结果如图

  • 相关阅读:
    django常用命令集合 待完善
    InSAR 数据
    InSAR 处理流程和原理
    InSAR 处理软件
    InSAR 参考书目,文献推荐
    InSAR
    小程序测试方案
    【非原创】测试环境的目的
    【非原创】测试的职责
    api自动生成思路
  • 原文地址:https://www.cnblogs.com/llj76720197/p/11560346.html
Copyright © 2011-2022 走看看