在我们开始学习Linux汇编之前,需要简单的了解一下计算机的体系结构。我们不需要特别深入的了解,理解了一些基本概念对与我们理解程序会很有帮助。现在计算机的结构体系都是采用冯诺依曼体系结构的基础上发展过来的。而冯诺依曼的体系有两个主要组成部分:CPU和内存。而我们的汇编语言和这两个部分十分密切。

1.1 内存结构

内存的结构就像一排连续的房子,或者是一种矩阵。每个空间的大小是固定的,且每一个存储单元都有自己的地址或者编号。房子的地址是门牌号,而内存的每个单元都有自己的地址。

计算机的内存有数以万计的bit组成,每个bit可以保存0或1的值。但一个bit太小,单独使用用处不大,所以把8bit作为一个单位,叫做字节byte。

1.2 CPU结构

CPU一次从内存中读取一条指令并执行,前面CPU执行指令的的过程叫做读取–执行周期或者叫做指令周期。而CPU基本包涵下面的部分:

  • 程序计数器
  • 指令解码器
  • 数据总线
  • 通用寄存器
  • 算术逻辑单元

程序计数器保存即将执行的下一条指令的内存地址,CPU先查看程序计数器,获取指定地址的数字,并把这个数据交由指令解码器来解释那个数字所代表的指令。之后,计算机使用数据总线取得存储在内存单元的用于计算的数据。(顺便提一下,数据总线是CPU和内存之间的物理连线)

当然,作为CPU中的特殊高速存储单元——寄存器有两种:通用寄存器和专用寄存器。

通用寄存器是进行主要计算的地方,比如加减乘除和比较等运算。但CPU中的通用寄存器很少,所以只有当处理是数据才会进入寄存器中,不用时都存储在主内存中。

专用寄存器不好说明,当遇到具体情况在说明。

1.3 寻址方式

计算机处理器对数据有多种不同的访问方式,称为寻址方式。

    • 立即寻址方式 指令本身就包含了访问的数据。比方说,我们要把寄存器初始化为0,那么可以使用立即寻址方式,把0赋值给寄存器,而不是告诉计算机一个值为0的地址
    • 寄存器寻址 访问对象是寄存器,不是内存里的地址,这个好理解。
    • 直接寻址方式 指令中包含要访问的内存地址。
    • 变址寻址方式 指令中包含一个访问地址之外,还要指定一个变址寄存器,其中包含该地址的偏移量。比如内存地址是2013, 变址寄存器的值是2, 那么实际访问的地址是2013 + 2 = 2015. 而且还可以指定变址的比例因子,比如我们想要一字(4字节)访问,那么比例因子就是4。
    • 间接寻址方式 指令中有一个寄存器,这个寄存器存储的是一个地址,这个地址只想我们需要的数据,这个地址被称为指针。
    • 基址寻址方式 这个方式和间接寻址类似,当加上一个偏移量,将寄存器的值加上这个值,再寻址。

Linux汇编教程01: 基本知识的更多相关文章

  1. Linux汇编教程03:大小比较操作

    我们在上一讲中,简单了解了汇编程序大概的样子.接下来我们来了解一下,汇编程序的大小比较操作.所以我们以编写寻找一堆数中的最大值作为学习的载体. 在编写程序之前,先要分析我们的目的,在得出解决方案. 目 ...

  2. Linux汇编教程02:编写第一个汇编程序

    学习一门语言,最好的方式就是在运用中学习,那么在这一章节中,我们开始编写我们的第一个汇编程序.当然作为第一个程序,其实十分的简单,但可以给大家一个基本的轮廓,了解汇编大概是这样的. 我们这个程序实际上 ...

  3. Linux汇编教程04:寻址方式

    这一节,我们主要来讨论寻址方式,这一点十分重要. 我们上一节有稍微提了一下,内存地址引用的通用格式: 地址或偏移(%基址寄存器, %索引寄存器, 比例因子 ) 结果地址 = 地址或偏移 + %基址寄存 ...

  4. Xamarin Android教程Android基本知识版本介绍与系统介绍

    Xamarin Android教程Android基本知识版本介绍与系统介绍 Xamarin Android教程Android基本知识版本介绍与系统介绍,开发Andriod有时候不像iOS一样轻松,因为 ...

  5. Linux makefile 教程 非常详细,且易懂(转)

    转自:http://blog.chinaunix.net/uid-27717694-id-3696246.html 原文地址:Linux makefile 教程 非常详细,且易懂 作者:Deem_pa ...

  6. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  7. [译]Vulkan教程(01)入门

    [译]Vulkan教程(01)入门 接下来我将翻译(https://vulkan-tutorial.com)上的Vulkan教程.这可能是我学习Vulkan的最好方式,但不是最理想的方式. 我会用“d ...

  8. 羽夏看Linux内核——段相关入门知识

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...

  9. 羽夏看Linux内核——门相关入门知识

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...

随机推荐

  1. java邮件开发

    一.邮件协议: (重点)SMTP:发送邮件的协议.Simple Message Transfer Protocal.默认端口:25 POP:邮局协议(收件协议).Post Office Protoca ...

  2. [CF613D]Kingdom and its Cities

    description 题面 data range \[n, q,\sum k\le 10^5\] solution 还是虚树的练手题 \(f[0/1][u]\)表示\(u\)的子树内,\(u\)是否 ...

  3. [洛谷P5075][JSOI2012]分零食

    题目大意:有$m(m\leqslant10^8)$个人站成一排,有$n(n\leqslant10^4)$个糖果,若第$i$个人没有糖果,那么第$i+1$个人也没有糖果.一个人有$x$个糖果会获得快乐值 ...

  4. 【BZOJ1486】最小圈(分数规划)

    [BZOJ1486]最小圈(分数规划) 题面 BZOJ 洛谷 求图中边权和除以点数最小的环 题解 分数规划 二分答案之后将边权修改为边权减去二分值 检查有无负环即可 #include<iostr ...

  5. BZOJ1043:[HAOI2008]下落的圆盘——题解(配图片)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1043 Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周 ...

  6. LOJ6276:果树——题解

    https://loj.ac/problem/6276#submit_code NiroBC 姐姐是个活泼的少女,她十分喜欢爬树,而她家门口正好有一棵果树,正好满足了她爬树的需求.这颗果树有N 个节点 ...

  7. PHP汉字转拼音

    <?php/** *+------------------------------------------------------ * PHP 汉字转拼音 *+----------------- ...

  8. anroid 6.0.1_r77源码编译

    一.源码下载(基本类似4.4.4_r1) 二.必须使用openjdk1.7 sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update ...

  9. 背景建模技术(六):帧处理(FrameProcessor)模块

    前面几篇文章简单介绍了BgsLibrary的入口函数.视频分析和视频捕获模块,本文将简单介绍帧处理模块,即对每一帧进行处理的函数,也就是真正调用背景建模算法的接口处. 下面贴出源码供大家分析: #in ...

  10. ACM1004 Let the balloons fly

    These code is for the problem "Let the balloons Fly" in ACM 1004 which need deal with stri ...