Linux汇编教程01: 基本知识

  在我们开始学习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。
    • 间接寻址方式 指令中有一个寄存器,这个寄存器存储的是一个地址,这个地址只想我们需要的数据,这个地址被称为指针。
    • 基址寻址方式 这个方式和间接寻址类似,当加上一个偏移量,将寄存器的值加上这个值,再寻址。

原文地址:https://www.cnblogs.com/guochaoxxl/p/10468708.html

时间: 2024-10-18 15:22:04

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

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

我们在上一讲中,简单了解了汇编程序大概的样子.接下来我们来了解一下,汇编程序的大小比较操作.所以我们以编写寻找一堆数中的最大值作为学习的载体. 在编写程序之前,先要分析我们的目的,在得出解决方案. 目的:在一堆数中找到最大的数 思路:要实现这个目的,首先,我们一定要对数据进行索引,每一次比较,两个数应该分别占用一个寄存器,得到最大值,所以,我们有一个寄存器一定是存放最大值的.一开始没有最大值,我们不妨设第一个数为最大值,后面一次索引大小比较.得出最大值.索引中还会用到循环结构. 解决方案——代码

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

学习一门语言,最好的方式就是在运用中学习,那么在这一章节中,我们开始编写我们的第一个汇编程序.当然作为第一个程序,其实十分的简单,但可以给大家一个基本的轮廓,了解汇编大概是这样的. 我们这个程序实际上没什么作用,只是简单的推出而已.下面就是程序的范例 # 目的: 退出程序并向Linux内核返回一个状态码 # 输入: 无 # 输出: 返回一个状态码.在程序运行结束后可以通过 echo $? 来读取状态码 # 变量: %eax保存系统调用号 %ebx保存返回状态 .section .data .se

Linux汇编教程04:寻址方式

这一节,我们主要来讨论寻址方式,这一点十分重要. 我们上一节有稍微提了一下,内存地址引用的通用格式: 地址或偏移(%基址寄存器, %索引寄存器, 比例因子 ) 结果地址 = 地址或偏移 + %基址寄存器 + 比例因子 + %索引寄存器 地址或偏移和比例因子必须是常数,剩下的那两个必须是寄存器,在缺省的情况下,都用0来代替. 立即寻址方式 直接将值加载到目地位置中 movl $221, %eax</p> 1 直接寻址方式 通过使用地址或偏移来实现 movl ADDRESS, %eax</p

Linux makefile 教程 很具体,且易懂

近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了下面这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>的makefile一章所讲述的惊人的类似,仅仅是这篇文章从一个实例切入,在有些地方比較好理解.能让人看懂就是好文章. 跟我一起写 Makefile陈皓 (CSDN)概述--什么是makefile?也许非常多Winodws的程序

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

很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用make更新函数库文件 后序 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>

Linux培训教程 linux系统下分割大文件的方法

在linux中分割大文件,比如一个5gb日志文件,需要把它分成多个小文件,分割后以利于普通的文本编辑器读取. 有时,需要传输20gb的大文件,Linux培训 教程件到另一台服务器,也需要把它分割成多个文件,这样便于传输数据. 以下通过五个不同的例子,来讲解Linux下分割大文件的方法,供大家参考. 例1.以每个文件1000行分割 split命令分割文件成每个文件1000行,并且文件名依次为 [前缀]aa,[前缀]ab, [前缀]ac等,默认的前缀是X,每个文件的行数为1000行. 命令: 复制代

linux 入门教程

linux入门教程 搜索 Linux入门教程 前言 第一章 关于Linux的历史 第二章 图形界面还是命令窗口 第三章 Linux操作系统的安装 第四章 初步进入linux世界 第五章 Linux系统的远程登录 第六章 Linux文件与目录管理 第七章 Linux系统用户以及用户组管理 第八章 Linux磁盘管理 第九章 文本编辑工具vim 第十章 文档的压缩与打包 第十一章 安装RPM包或者安装源码包 第十二章 学习shell脚本之前的基础知识 第十三章 正则表达式 第十四章 SHELL 脚本

Linux makefile教程之概述一[转]

概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些 Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就好像现在有这么多 的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile 了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力. 因为,makefile关系到了整个工

Linux学习教程推荐下载

RedhatLinux系统管理 http://down.51cto.com/data/1328166 The.Complete.FreeBSD.3rd.Edition http://down.51cto.com/data/1328165 UNIX和Linux权威教程(第三版) http://down.51cto.com/data/1328164 linux系统常用基本命令 http://down.51cto.com/data/1328163 红帽企业Linux虚拟化管理 http://down.