嵌入式系统中基本汇编语法详解

嵌入式系统中基本汇编语法详解

初等应用

if语句

if (a<b){
    
    x=5;y=c+d;}
else{
    
    x=c-d;}
ADR r4 ,a;
LDR r0 ,[r4];
ADR r4 ,b;
LDR r1 ,[R4];
CMP r0 ,r1;
BLT fblock;
ADR r4 ,c;
//若干执行语句(else)
B after 
fblock ADR ;
//若干执行语句(if a<b)
after

for循环

for (i=0;i<20;i++){
    
    
  for (j=0;j<10;j++){
    
    
    z[i][j]=a[i][j]*b[i];
  }
}
MOV r0 ,#0 ;ro-i
ADR r2 ,z;
ADR r3 ,a;
ADR r4 ,b;
MOV r8 ,#0;
MOV r9 ,#0;

LOOP mov r1,#0; r1=0;
LOOP1 LDR r5 ,[r3,r8];a[i][j]
			LDR r6 ,[r3,r9];b[i]
			MUL r7 ,r5,r6;
			STR r7 ,[r4,r8];
			ADD r1,r1,#1;
			ADD r8,r8,#4;
			CMP r1,#10;
			BLT loop 1
			ADD r9,r9,#4
			ADD r0,r0,#1;
			CMP r0,#20
			BLT loop
loopend
for (i=0;i<20;i++){
    
    
  for (j=0;j<10;j++){
    
    
    z[i][j]=a[i][j]*b[j];
  }
}
MOV r0 ,#0 ;ro-i
ADR r2 ,z;
ADR r3 ,a;
ADR r4 ,b;
MOV r8 ,#0;
MOV r9 ,#0;

LOOP mov r1,#0; r1=0;
MOV r9 ,#0;
LOOP1 LDR r5 ,[r3,r8];a[i][j]
			LDR r6 ,[r3,r9];b[i]
			MUL r7 ,r5,r6;
			STR r7 ,[r4,r8];
			ADD r1,r1,#1;
			ADD r8,r8,#4;
							ADD r9,r9,#4
			CMP r1,#10;
			BLT loop 1
		;	ADD r9,r9,#4
			ADD r0,r0,#1;
			CMP r0,#20
			BLT loop
loopend

状态机的应用

Thumb指令集

Thumb指令集使用16bit指令的再编码子集,比ARM具有更好的代码密度 增加ARM使用16位总线时的系统性能。

相似处

Thumb指令都是16位,都有相对应的ARM指令,因此继承了ARM指令集的许多特d点

  • L-S结构
  • 支持8位字节,16位半字,32位字数据
差异处

为了实现16位指令

  • 多数thumb指令无条件执行

    条件执行:

    条件域占据32位指令域的高4位,条件域共有16个值,每个值都根据CPSR中的标志位决定指令是否执行还是跳转。

  • 多数数据处理指令采用2地址格式

  • 没有ARM指令格式规则

B和BL

  • 没有太大的区别,只不过B主要用于非返回的跳转,BL一般用于子程序。
  • BL 会将下一条指令的地址存入r14
  • 回转时只需要 MOV r15,r14;

计算平台

基本计算平台

平台硬件组件

平台软件组件

硬件和软件不可分割,需要二者配合实现功能。嵌入式系统的许多软件来自外部资源,一些软件组件来自于第三方。层次图常用来描述系统中不同软件组件间的关系,硬件抽象层(HAL)提供硬件的基本层次抽象,设备驱动通常采用HAL来简化它们的结构,同时,电池管理模块必须在低层次上对硬件进行访问。操作系统和文件系统提供复杂应用所需要的基本抽象。

CPU总线

总线是CPU与存储器和设备通信的机制。总线,首先是一束电线,还定义了CPU,存储器和设备之间的通信。总线的主要作用是提供到存储器的接口。CPU作为总线主控器,启动所有的传输。大部分总线协议采取四周期握手,握手协议保证当两个设备试图通信时,一个准备发送,一个准备好接受。

  • 设备1将查询信号置为高电平,以告诉设备2应准备监听数据
  • 设备2准备好接受数据,将应答信号置为高电平,设备1和设备2已经准备好发送和接受。
  • 设备2将应答信号置为低电平表示为接受了数据。
  • 应答信号变低后,设备1将查询信号置为低电平。
存储设备和系统

随机存取存储器可以被读和写。

组合逻辑电路中的竞争与险象

竞争

同一个信号或同时变化的某些信号,经过不同路径到达某一个点有时差,我们将之称之为竞争,但并不是所有竞争都会产生错误的输出。对于有错误输出我们将之称为临界竞争。

险象

静态险象

当输出为1-0-1,该险象称之为静态1险象;当输出为0-1-0,该险象称之为静态0险象。

静态险象又分为功能险象和逻辑险象。

功能险象
  • K个输入信号同时发生变化
  • 输入变量变化前后的稳态输出不变

功能险象是由于各输入信号变化的快慢不一致导致了竞争,是逻辑函数功能所固有的,无法通过改变设计的方法消除,它只能通过控制输入信号的变化次序来避免

逻辑险象
  • 仅有一个输入信号发生变化
  • 输入变量变化前后的稳态输出相同

动态险象

若输入变化前后的稳态值不同,且在输出稳定前出现 1-0-1-0 0-1-0-1,我们称之为动态险象。

CPU

存储系统机制

高速缓存被广泛用于提高内存系统性能。可以显著减少内存平均访问时间,

强制性未命中

单元第一次被访问时

容量未命中

工作集过大

冲突未命中

两个地址映射到高速缓存的同一个单元

实现高速缓存的方法

直接映射高速缓存

高速缓存由高速缓存块组成

用于指示这一块代表哪个内存单元的标记
用于保存内存相应内容的数据域
表示该高速缓存块内容是否有效的有效标记

索引用于选择高速缓存中的哪一块被检测。

标记用来与被索引选中块的标记值进行比较

如果数据域的长度大于最小的寻址单元,那地址的最低几位用作偏移量,从数据域中选择所需的值。

写操作

通写

每次写操作将都同时改变高速缓存和相应的主存单元,这种模式保证了高速缓存和主存的一致性,但会产生额外的主存通信。

回写

只在将某一单元从高速缓存中移出时才进行写,我们因此可以减少在该单元移出高速缓存之前对它的多次写操作。

组相联

组相联高速缓存由存储体个数或路来描述,相应称为n路组相联高速缓存。

CPU技术

流水线技术

ARM7的三段流水线

1.取指 :将指令从内存中取出来

2.译码: 译码得到操作码和操作数来决定执行什么功能。

3.执行: 执行已译码的指令。

流水线化的RISC机器更是具有特备规则的时序特征;大部分没有流水线冒险的指令都表现出相同的延时。

不理想的状态

数据阻滞

多装入指令就是在执行阶段需要多个周期才能完成的例子。

控制阻滞

这就是我们所说的分支损失,是否执行条件BNE要等指令的第三个时钟周期才能确定。

引入延迟分支 在这种形式的分支指令中,有一些直接跟在分支指令后面的指令往往会执行,无论分支指令执行与否它们都会执行。

存储器

随机存取存储器(RAM)可以被读和写。随机存取是因为它们可以按照任意顺序访问。

一般是动态随机存储器(DRAM),DRAM密度很大,但是数据需要周期性刷新。

由于某部分存储单元正在被刷新,在刷新结束前它是不能被访问的。

只读存储器

内存是ROM的主要类型,它使用标准电压擦写和编程,允许芯片在标准系统内部再编程。

猜你喜欢

转载自blog.csdn.net/xrk00/article/details/125057194