在我们开始学习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. 异步执行任务SimpleAsyncTaskExecutor详解

    SimpleAsyncTaskExecutor 异步执行用户任务的SimpleAsyncTaskExecutor.每次执行客户提交给它的任务时,它会启动新的线程,并允许开发者控制并发线程的上限(con ...

  2. 第23天:js-数据类型转换

    一.padding1.内边距会影响盒子大小2.行内元素,尽量不用上下的padding和margin3.块元素嵌套块元素.子级会继承父级的宽度,高度由内容决定.如果给子级再设置padding,不会影响盒 ...

  3. CCS3 动画-鼠标放上去放大背景图片

    ---〉 效果如上,一个简单的过渡放大效果, <!DOCTYPE HTML> <html> <body> <style> #test{ width:30 ...

  4. OBJ文件

    OBJ文件是Alias|Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种标准3D模型文件格式,很适合用于3D软件模 ...

  5. LOJ6342::跳一跳——题解

    https://loj.ac/problem/6342 f[i]表示从i开始跳的期望时间,f[n]=0. 所以f[i]=(f[i]+f[i+1]+……+f[n])/(n-i+1)+1. 移项整理可求f ...

  6. 2016多校联合训练1 B题Chess (博弈论 SG函数)

    题目大意:一个n(n<=1000)行,20列的棋盘上有一些棋子,两个人下棋,每回合可以把任意一个棋子向右移动到这一行的离这个棋子最近的空格上(注意这里不一定是移动最后一个棋子),不能移动到棋盘外 ...

  7. STL之六:map/multimap用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8547007 map/multimap 使用map/multimap之前要加入头文件# ...

  8. hive executeTask被interrupt处理

    异常信息如下: java.io.IOException: Failed on local exception: java.nio.channels.ClosedByInterruptException ...

  9. Itext2.0.8 和freemarker导出pdf

    这个是跟上一篇写的freemarker导出word是一块的.但是关联性不是很大.由于本人技术有限本篇导出也是根据网上大家的做出的demo混合而成.有不足的地方请大家指出.好改正,使以后看到的freem ...

  10. [LeetCode] 1. Two Sum ☆

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...