在我们开始学习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. HTML5 iframe sandbox javascript getTime

    1 1 HTML5 iframe sandbox 1 1 <!DOCTYPE html> <html> <body> <iframe src="de ...

  2. MAC锁屏不断网(快捷键启用屏保)

    第一步:要设定锁定输入密码的设置,进入'系统偏好设置''安全性与隐私',将选项'进入睡眠或开始屏幕保护程序后'打勾,选'立即'. 第二步:到'launchpad'中的'其他'文件夹打开'Automat ...

  3. ASP.NET MVC下使用文件上传和IIS7下的默认设置限制了上传大小的方法

    不多说了,直接用别人的 http://www.cnblogs.com/jiekzou/p/4491505.html

  4. MATLAB strcmp

    比较两个输入字符串是否相等 c = strcmp(str1,str2)比较字符串 str1 与 str2 ,若完全相等则返回 1 ,不相等返回 0 str1 = 'hello'; str2 = 'he ...

  5. hdu 2151 Worm (DP)

    Worm Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. (七)Redis对键key的操作

    key的全部命令如下: keys pattern # 查找所有符合给定模式pattern的key ,查找所有key 使用[keys *] del key1 key2 ... # 删除给定的一个或多个k ...

  7. 【题解】HNOI2014世界树

    脑子不清醒的时候千万别写题.写题写不下去了千万别死扛,重构才是你唯一的出路QAQ 昨天很想快点写道题,思路没有很清晰的时候就写了,结果……今天一怒之下决定重整思路重构代码,其实不过是半个小时的事情…… ...

  8. 【刷题】BZOJ 2882 工艺

    Description 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工 ...

  9. java.util.Stack类简介(栈)

    Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来 Deque(双端队列)比起stack具有更好的完整性和一致性,应该被优先使用 ...

  10. BZOJ1101 & 洛谷3455:[POI2007]ZAP——题解

    https://www.luogu.org/problemnew/show/3455#sub http://www.lydsy.com/JudgeOnline/problem.php?id=1101 ...