一篇总结 Linux 系统启动的几个汇编指令

学习 Linux 系统启动流程,必须熟悉几个汇编指令,总结给大家。

这里不是最全的,只列出一些最常用的汇编指令。

一.数据处理指令

1.数据传送指令

【MOV指令】

把一个寄存器的值(立即数)赋给另一个寄存器,或者将一个常量赋给寄存器。

MOV指令的格式为:

MOV 目的寄存器,源操作数MOV R1,R0   ;将寄存器R0的值传送到寄存器R1

2.算术运算指令

(1)【加法指令】:ADD

ADD 目的寄存器,操作数1,操作数2

ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。

ADD  R0,R1,R2   ;R0 = R1 + R2
ADD  R0,R1,#256   ;R0 = R1 + 256

(2)【带进位的加法指令】:ADC

ADC 目的寄存器,操作数1,操作数2

ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。

(3)【减法指令】:SUB

SUB 目的寄存器,操作数1,操作数2

把操作数1减去操作数2,并将结果存放到目的寄存器中。

SUB  R0,R1,R2  ;R0 = R1 - R2
SUB  R0,R1,#256  ;R0 = R1 - 256

3.比较指令

(1)【直接比较指令】:CMP

CMP  操作数1,操作数2CMP R1,R0;将寄存器R1的值与寄存器R0的值相减,并根据结果设置CPSR的标志位
CMP R1,#100;将寄存器R1的值与立即数100相减,并根据结果设置CPSR的标志位

4.逻辑运算指令

(1)【逻辑与指令】:AND

AND  目的寄存器,操作数1,操作数2

AND 指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。

AND  R0,R0,#3 ; 该指令保持R0的0、1位,其余位清零。

(2)【逻辑或指令】:ORR

ORR 目的寄存器,操作数1,操作数2

ORR 指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。

ORR  R0,R0,#3 ; 该指令设置R0的0、1位,其余位保持不变。

二.转移指令

【跳转指令】

B   跳转指令
BL  带返回的跳转指令
BLX 带返回和状态切换的跳转指令
BX  带状态切换的跳转指令

三.程序状态寄存器访问指令

1、【MRS指令】

MRS 通用寄存器,程序状态寄存器(CPSR或SPSR)MRS R0,CPSR   ;传送CPSR的内容到R0
MRS R0,SPSR   ;传送SPSR的内容到R0

2、【MSR指令】

MSR 程序状态寄存器(CPSR或SPSR)_<域>,操作数MSR CPSR,R0   ;传送R0的内容到CPSR
MSR SPSR,R0   ;传送R0的内容到SPSR

 资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linuxc/c++高级开发【直播公开课】

零声白金VIP体验卡:零声白金VIP体验卡(含基础架构/高性能存储/golang/QT/音视频/Linux内核)

四.加载/存储指令

ARM 微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。

1、【LDR指令】

LDR 目的寄存器,<存储器地址>

LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。

LDR  R0,[R1]  ;将存储器地址为R1的字数据读入寄存器R0。
LDR  R0,[R1,R2]  ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR  R0,[R1,#8]  ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR  R0,[R1,R2] ! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR  R0,[R1,#8] ! ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。

LDRB 和 LDRH 指令大家可以百度。

2、【STR指令】

STR 源寄存器,<存储器地址>

STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,且寻址方式灵活多样,使用方式可参考指令LDR。

STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中。

STRB 和 STRH指令大家可以百度。

五.异常产生指令

1、【SWI指令】

SWI 24位的立即数

SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。

SWI  0x02 ;该指令调用操作系统编号位02的系统例程。

2、【BKPT指令】

BKPT   16位的立即数

BKPT指令产生软件断点中断,可用于程序的调试。

六.伪代码

1.【AREA】

一个汇编程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段,因此在汇编程序的开头,我们一般的语句会用到AREA。

AREA 段名 属性 1 ,属性 2 ,....  AREA Init ,CODE ,READONLY ;定义一个代码段,段名为 Init ,属性为只读。 

2、【ALIGN】

ALIGN { 表达式 { ,偏移量 }}    

ALIGN 伪指令可通过添加填充字节的方式,使当前位置满足一定的对其方式。其中,表达式的值用于指定对齐方式,可能的取值为2的幂,如 1 、2 、4 、8 、16 等。eg : xxx = ALIGN(4)

3、【CODE16、CODE32】

CODE16 (或 CODE32 )

CODE16 伪指令通知编译器,其后的指令序列为 16 位的 Thumb 指令。

CODE32 伪指令通知编译器,其后的指令序列为 32 位的 ARM 指令。

4、【ENTRY】

ENTRY  ENTRY(stext)  

很常见!!!ENTRY 伪指令用于指定汇编程序的入口点。在一个完整的汇编程序中至少要有一个 ENTRY (也可以有多个,当有多个 ENTRY 时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个 ENTRY (可以没有)。

5、【END】

END      

END 伪指令用于通知编译器已经到了源程序的结尾。

原文作者:一起学嵌入式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python---函数的参数类型

位置参数 理论上&#xff0c;在函数定义时&#xff0c;我们可以为其定义多个参数。但是在函数调用时&#xff0c;我们也应该传递多个参数&#xff0c;正常情况&#xff0c;其要一一对应。 相关链接&#xff1a;Python---函数的作用&#xff0c;定义&#xff0c;使用步骤&…

opencv 常用操作指南

1.通道交换 读取图像&#xff0c;然后将RGB通道替换成BGR通道&#xff0c;需要注意的是&#xff0c;opencv读取的图像默认是BGR。cv2.cvtColor函数可以参考Color Space Conversions img cv2.imread(imori.jpg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) cv2.imwrite(answe…

1|1111

1、指定在每天凌晨4&#xff1a;00将该时间点之前的系统日志信息&#xff08;/var/log/messages &#xff09;备份到目录下/backup&#xff0c;备份后日志文件名显示格式logfileYY-MM-DD-HH-MM 2、配置ssh免密登陆&#xff1a;客户端主机通过redhat用户基于秘钥验证方式进行远…

微服务实战系列之Nginx

前言 Nginx&#xff1f;写了那么多文章&#xff0c;为什么今天才轮到它的表演&#xff1f;那是因为它实在太重要了&#xff0c;值得大书特书&#xff0c;特别对待。 当我们遇到单点瓶颈&#xff0c;第一个idea是&#xff1f;Nginx&#xff1b; 当我们需要反向代理&#xff0c;…

机器学习/sklearn笔记:MeanShift

1 算法介绍 一种基于质心的算法通过更新候选质心使其成为给定区域内点的均值候选质心的位置是通过一种称为“爬山”技术迭代调整的&#xff0c;该技术找到估计的概率密度的局部最大值 1.1 基本形式 给定d维空间的n个数据点集X&#xff0c;那么对于空间中的任意点x的均值漂移…

C#,《小白学程序》第一课:初识程序,变量,数据与显示

曰&#xff1a;扫地僧练就绝世武功的目的是为了扫地更干净。 1 引言 编程只是一项技术&#xff0c;如包包子&#xff0c;不是什么高深的科学。 学习程序最不好的方法是先学习枯燥的语法。 学习程序主要是用代码解决问题。因此&#xff0c;我们抛开所有的语法与诸多废物&…

React项目中发生空白但不报错的原因分析和解决?

文章目录 前言组件渲染问题状态管理问题异步操作问题代码错误但未抛出异常如果我们使用的是chorme浏览器的话&#xff0c;可以下载一个开发者工具&#xff0c;例如下图&#xff1a;代码审查使用调试工具日志和输出检查外部依赖异步操作终极大法&#xff0c;不到万不得已不可以使…

python+gurobi求解线性规划、整数规划、0-1规划

文章目录 简单回顾线性规划LP整数规划IP0-1规划 简单回顾 线性规划是数学规划中的一类最简单规划问题&#xff0c;常见的线性规划是一个有约束的&#xff0c;变量范围为有理数的线性规划。如&#xff1a; 使用matlab的linprog函数即可求解简单的线性规划问题&#xff0c;可以参…

Python推导式

python推导式是一种独特的数据处理方式&#xff0c;可以从一个数据序列构建到另一个新的数据序列的结构体。 Python支持各种数据结构的推导式&#xff1a; 1. 列表&#xff08;list&#xff09;推导式 [表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list] or …

【​用运算放大器设计恒流电流源电压4V-74V适应范围 ​】2021-11-29

缘由用运算放大器设计恒流电流源-编程语言-CSDN问答直流恒流源设计&#xff0c;要求用到运算放大器-硬件开发-CSDN问答求助恒流驱动电路&#xff0c;运放端口电压的问题&#xff1f; - 电路设计论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!(不能实现恒流坏的电路设计反面例子…

OpenCV快速入门:特征点检测与匹配

文章目录 前言一、角点检测1.1 角点特征1.1.1 角点特征概念1.1.2 角点的特点1.1.3 关键点绘制代码实现1.1.4 函数解析 1.2 Harris角点检测1.2.1 Harris角点检测原理1.2.2 Harris角点检测公式1.2.3 代码实现1.2.4 函数解析 1.3 Shi-Tomasi角点检测1.3.1 Shi-Tomasi角点检测原理1…

GIT,解决远程分支冲突

背景&#xff1a;当远程分支A 与maste 有冲突如何解决–此时无法在这两个版本之间merge 1、切换到master分支&#xff1a; git checkout master 2、更新master分支代码&#xff1a; git pull 3、再次切换到自己新建的分支&#xff1a; git checkout add_login_check_func 4、将…

SuperMap iDesktopX如何获取简单线的起终端点及坐标

作者&#xff1a;超图研究院技术支持中心-于丁 SuperMap iDesktopX如何获取简单线的起终端点及坐标 在GIS行业应用中&#xff0c;线数据的端点坐标有非常多的用处。 定位和可视化&#xff1a;线数据端点坐标可以用于定位和可视化线要素在空间中的位置。这对于地图制作、规划和…

初识Linux(1),看了这篇文章,妈妈再也不用担心我Linux找不到门了。

文章目录 前言1. ls 指令例如&#xff1a;只显示文件名属性ls显示文件详细属性 ls - l 该操作可以简写成ll查看隐藏文件ls -l -a 2.pwd例如&#xff1a;显示当前目录所处的路径类似于windows如下操作: 3.cd 指令例如&#xff1a;改变工作目录相当于windows如下操作 4.whoami 指…

html幸运大转盘抽奖(附源码)

文章目录 1.设计来源1.1 幸运大转盘 风格11.2 幸运大转盘 风格21.3 幸运大转盘 风格31.4 幸运大转盘 奖品效果1.5 幸运大转盘 活动未开始1.6 幸运大转盘 活动已结束1.7 幸运大转盘 图片源素材 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&a…

Windows power shell for循环

有时候需要重复执行某个shell命令 for($i1;$i -lt 10;$i$i1){echo $i}如果是cmd for /l %i in (1,1,5) do echo %i

卷积神经网络(Inception V3)识别手语

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建Inception V3网络模型1.自己搭建2.官方模型 五、编译六、训练模型七、模型…

再生式收音机踩坑记

下载《A Simple Regen Radio for Beginners》这篇文章也有好几年了&#xff0c;一直没有动手&#xff0c;上周末抽空做了一个&#xff0c;结果相当令人沮丧&#xff0c;一个台也收不到&#xff0c;用示波器测量三极管振荡波形&#xff0c;只有在调节再生电位器R2过程中&#xf…

什么是合封芯片工艺,合封芯片工艺工作原理、应用场景、技术要点

芯片封装技术不断进步&#xff0c;其中合封芯片工艺作为一种先进的芯片封装技术&#xff0c;“超”广泛应用于各类电子设备中。 本文将从合封芯片工艺的工作原理、应用场景、技术要点等方面进行深入解读。 一、合封芯片工艺 合封芯片工艺是一种将多个芯片或不同的功能的电子模…

构造命题公式的真值表

构造命题公式的真值表 1&#xff1a;实验类型&#xff1a;验证性2&#xff1a;实验目的&#xff1a;3&#xff1a;逻辑联结词的定义方法4&#xff1a;命题公式的表示方法5&#xff1a;【实验内容】 1&#xff1a;实验类型&#xff1a;验证性 2&#xff1a;实验目的&#xff1a…