2022年10月17日-10月21日学习周报

未来的几周将会学习ARM开发相关知识:ARM汇编语言开发;ARM裸机开发;如何在嵌入式上安装操作系统;基于Linux内核的设备驱动开发;

本周主要接触了ARM汇编语言开发。故本次周报主要对汇编语言进行总结汇总。

目录

1)8种工作模式

2)基础知识

2.1)CPSR寄存器

2.2)ARM指令的一般语法形式:

2.3)汇编源码文件的基本构成:

 2.4)寻址方式:

3)数据处理类指令

3.1)算术运算指令

加法:

带进位的加法:

减法:

带借位的减法:

逆向减法:

带借位的逆向减法:

3.2)位运算(逻辑运算)指令

按位与:

按位或:

按位异或:

位清除:


1)8种工作模式

1.用户模式(usr):User模式

        操作系统上 应用程序代码 运行本模式;

2.系统模式(sys):System模式

        操作系统 内核源码里,各个系统 调用函数体内,代码 所处的工作模式;

3.管理模式(svc):Supervisor模式

        3.1)开机或复位 运行的代码 所处的工作模式;

        3.2)软中断异常 的处理代码 所处的工作模式;

4.中断模式(irq):Interrupt模式

        中断异常的 处理代码 所处的工作模式;

        中断是一种硬件通知机制;

5.快速中断模式(fiq):Fast-Interrupt模式

        快中断异常的 处理代码 所处的工作模式;

        快终端也是一种硬件通知机制,但其 响应速度 要比 中断异常 更快;

6.未定义模式(und):undefine模式

        当CPU无法正确执行某条指令,会产生未定义指令异常;

        未定义指令 异常的 处理代码 所处的工作模式;

7.中止模式(abt):Abort模式

        数据终止异常 或 指令预取异常的 处理代码所处的工作模式;

        当CPU访问内存时如果出错,会产生 数据中止异常 或 指令预取 异常;

8.监控模式(mon):monitor模式

        执行安全监控性质代码时所处的工作模式;

注意:1.第8种是Cortex-A在1-7工作模式上增加的;

2.第3、4、5、6、7五种模式专门用于应对处理异常,因此统一称为:异常模式(即svc、irq、fiq、und、abt);

2)基础知识

2.1)CPSR寄存器

 

2.2)ARM指令的一般语法形式:

2.3)汇编源码文件的基本构成:

 

 2.4)寻址方式:

 

3)数据处理类指令

3.1)算术运算指令

加法:

ADD+条件码+S标记 目标寄存器,第一个操作数寄存器,第二个操作数

功能:目标寄存器 = 第一个操作数寄存器的当前值 + 第二个操作数的值

带进位的加法:

ADC+条件码+S标记 目标寄存器,第一个操作数寄存器,第二个操作数

功能:目标寄存器 = 第一个操作数寄存器的当前值 + 第二个操作数的值

减法:

SUB+条件码+S标记 目标寄存器,第一个操作数寄存器,第二个操作数

功能:目标寄存器 = 第一个操作数寄存器的当前值 - 第二个操作数的值

带借位的减法:

SBC+条件码+S标记 目标寄存器,第一个操作数寄存器,第二个操作数

功能:目标寄存器 = 第一个操作数寄存器的当前值 - 第二个操作数的值 - CPSR的C位的反

逆向减法:

RSB+条件码+S标记 目标寄存器,第一个操作数寄存器,第二个操作数

功能:目标寄存器 = 第二个操作数的值 - 第一个操作数寄存器的当前值

带借位的逆向减法:

RSC+条件码+S标记 目标寄存器,第一个操作数寄存器,第二个操作数

功能:目标寄存器 = 第二个操作数的值 - 第一个操作数寄存器的当前值 - CPSR的C位的反

例:

.text
.global _start
_start:
    MOV R0,#0XF1000000
    MOV R1,#0X10000000

    MOV R2,#0XF2000000
    MOV R3,#0X20000000

    ADDS  R4,R0,R2
    ADS   R5,R1,R3

    B.
.end

3.2)位运算(逻辑运算)指令

按位与:

AND+条件码+S标记    目标寄存器,第一个操作数寄存器,第二个操作数

功能:目标寄存器 = 第一个操作数寄存器的当前值 & 第二个操作数的值

按位或:

ORR+条件码+S标记    目标寄存器,第一个操作数寄存器,第二个操作数

功能:目标寄存器 = 第一个操作数寄存器的当前值 | 第二个操作数的值

按位异或:

EOR+条件码+S标记    目标寄存器,第一个操作数寄存器,第二个操作数

功能:目标寄存器 = 第一个操作数寄存器的当前值 ^ 第二个操作数的值

位清除:

BIC+条件码+S标记    目标寄存器,第一个操作数寄存器,第二个操作数

功能:第二个操作数的值中哪些位是1,就将第一个操作数寄存器当前值中的对应位置置0,结果存放到目标寄存器中

相当于:目标寄存器 = 第一个操作数寄存器的当前值 & (~第二个操作数的值)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值