嵌入式学习笔记(二)

汇编工程文件中的内容

汇编文件中的符号
---------------------

1. 伪操作 :伪操作不占用代码段的空间,给编译器使用
    .text .global  .globl  .end  .if .else .endif  .data .word .short .byte
 
    不同的交叉编译器,对应的伪操作不同。
        
2. 汇编指令 :编译器可以将其编译生成32位的机器码,执行汇编指令可以完成一定的功能。

3. 伪指令 :伪指令本身不是一条汇编指令,但是编译器可以将其编译生成多条汇编指令,
        共同完成一条伪指令的功能。

    
4. 注释 :
        单行注释 : @
        多行注释 : /* */
        .if  0/1
            
        .else
            
        .endif
            
        编译器的不同,单行注释方式也不同。


--------------------------------------------------
汇编指令的分类
------------------------

1. 数据操作指令
	1> 数据搬移指令
	2> 移位操作指令
	3> 位运算指令
	4> 算数运算指令
	5> 比较指令

2. 跳转指令

3. Load/Store内存读写指令

4. 特殊功能寄存器读写指令

5. 软中断指令

汇编指令的学习,可以参考ARM-v7架构的手册。
ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf



---------------------------------------------------------


汇编指令的最基本的语法格式
-----------------------------

<opcode>{Cond}{S}  Rd, Rn, oprand_shifter
    
    解释:
    <opcode> : 指令码(指令名字) , 比如mov add sub mul and

    {cond} : 条件码, 实现汇编指令的有条件执行

    {S} : 状态标志

        指令加S, 指令的执行结果影响CPSR的NZCV位

        指令不加S, 指令的执行结果不影响CPSR的NZCV位
    
    Rd : 目标寄存器,只能是一个普通的寄存器, R0-R15

        存放指令的执行的结果 
 
    Rn : 第一个操作寄存器,只能是一个普通的寄存器, R0-R15

        可以看成运算符的左操作数

    oprand_shifter : 第二个操作数

        1> 可以是一个普通的寄存器

        2> 可以是一个立即数

        3> 可以是一个经过移位操作的寄存器
        
 
<opcode>{Cond}{S} : 书写时连到一起写

Rd, Rn, oprand_shifter : 书写时使用英文逗号隔开

<opcode>和Rd之间使用空格隔开
        
        每条汇编指令单独占用一行,汇编文件中不严格区分大小写。

        MOV R0, #0xFF <==> mov r0, #0xff <==> MoV R0, #0xFF


--------------------------------------------------------------

寄存器与指令流水线

寄存器是计算机中的一种存储器件,

它们通常被用来存储CPU需要快速访问的数据。

寄存器没有地址是因为它们是CPU内部的一部分,

不需要通过地址来进行访问。

CPU可以直接访问寄存器,而不需要通过地址总线和数据总线来进行访问。

因此,寄存器是一种非常快速的存储器件,可以提高计算机的运行效率。
--------------------------------------------------------------


特殊功能寄存器的介绍
-----------------------


R13寄存器(栈指针寄存器)
------------

作用:栈指针寄存器中存放的是栈指针指向栈空间的地址。

栈空间的作用:压栈保存现场,出栈恢复现场。


------------------------------------

R14寄存器(链接寄存器)
------------------------------

作用:链接寄存器中保存的是程序的返回地址,

跳转指令的下一条汇编指令的地址;

-------------------------------------


R15寄存器(程序计数寄存器)
-------------------------------
作用:程序计数寄存器中存储的是当前取指指令的地址,

当完成指令的取指操作之后,

PC寄存器会自动加4指向下一条汇编指令,

一条汇编指令占4字节空间。
-----------------------------------------


CPSR寄存器(当前程序状态寄存器)
----------------------------------

作用:CPSR寄存器中保存的是当前程序的运行的状态,

比如:ARM处理器的工作模式

------------------------------------------




SPSR寄存器(保存程序状态寄存器)
----------------------------------

作用:SPSR寄存器是专门用来对CPSR寄存器进行备份的。



-----------------------------------------



CPSR寄存器的详细介绍
------------------------


N[31] : 指令的执行结果为负数时,N位被自动置1,否则清0.

Z[30] : 指令的执行结果为零时,Z位被自动置1,否则清0.
   
C[29] :

    加法:产生进位时,C位被自动置1,否则清0.
     进位:低32位向高32位进位
    减法:产生借位时,C位被自动清0,否则置1.
     借位:低32位向高32位借位
    
    由于每个寄存器都是32位的,及一个寄存器中可以存储一个32位的数据,
    32位以内的数据进行加减法运算时,不要考虑进位和借位的问题。
    一条汇编指令可以完成32位以内数据的运算。

V[28] : 符号位发生变化时, V位被自动置1,否则清0.
    
I[7] : IRQ屏蔽位

    I = 0 :不屏蔽IRQ中断
    I = 1 :屏蔽IRQ中断
    
F[6] : FIQ屏蔽位

    F = 0 :不屏蔽FIQ中断
    F = 1 :屏蔽FIQ中断

T[5] : 状态位

    T = 0 : ARM状态,执行的ARM汇编指令
    T = 1 : Thumb状态,执行的Thumb汇编指令
    
    ARM指令,每条汇编指令的机器码占4个字节
    Thumb指令,每条汇编指令的机器码占2个字节

M[4:0] : 模式位
-------------------------------------------------------



指令流水线
-----------------
为了提高指令的执行效率,指令采用流水线的方式进行执行。

    三级流水线,五级流水线,七级流水线,八级流水线,十三级流水线 ....
    
本次课程重点讲解三级流水线:
------------------------------

取指器:
--------------

根据PC寄存器中的值,完成汇编指令的取指的操作,并转交给译码器。
-------------------------------------------------------------

译码器:
-------------


对汇编指令的机器码进行译码,并交给对应的执行器,执行汇编指令。
--------------------------------------------------------------

执行器:
-------------

执行汇编指令,并将指令的执行结果写回到寄存器中。
-------------------------------------------------
    
    以上三个器件是完全独立的,工作互不干扰,都属于单周期的器件。
    
    指令的周期 = 9 / 7 = 1
    
    以下指令的流水线是理想情况下的指令流水线,函数的调用,异常的处理

    会打断指令的流水线。
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值