• 10.ARM汇编的学习


    10.ARM汇编的学习

    ARM汇编的学习是很必要,学习ARM汇编不是要以后用汇编去写程序,而是要去看得懂,且进行修改就可以了。因为在后面的有关内核和bootloader的工程里,会有部分的代码是汇编程序编写的。在bootloader中,系统一旦上电,第一个运行的程序,需要对cpu、协处理器进行初始化,此时还没有C语言运行的环境,因为没有堆栈等条件。在内核里也是同样的道理。之所以要使用汇编,是因为它公认的高效性,在系统刚上电,或者在一个程序里需要高效的程序语言的时候,就会考虑用汇编来实现。就像C语言,它可以嵌入汇编代码,来提高运行效率。

        总结:两个会使用汇编的地方

    1. 启动代码。
    2. 效率要求高的地方。

    ARM汇编分类:

    目前常用的ARM汇编指令有两种:

    1. ARM标准汇编:适用于ARM公司的汇编器,适合在Windows平台使用,如ADS平台中使用。
    2. GNU汇编:适用于GNU交叉编译工具链中的汇编器,适合于Linux开发平台。

    其实呢ARM标准汇编和GNU汇编,这两种汇编代码的语法都差不多,只是GNU汇编的代码是小写的,ARM标准汇编是大写的。还有一些细微的差别而已。

    GNU汇编代码基本框架:图1-1:

    .section .data

        <初始化的数据>

    .section .bss

        <未初始化的数据>

    .section .text //.text表明下面是代码段

    .globl _start

    _start: //ARM汇编的入口,需要用.global声明为全局的,外面的文件才能使用该标示

        <汇编代码>

    图1-1

    如果工程中没有初始化的数据,也没有未初始化的数据,在实际编写的时候,把.text前的.section也省略了。最后的汇编的程序框架如下图:1-2:

    .text

    .global _start

    _start:

        <汇编代码>

    图1-2

    建立基本的汇编程序框架:

    首先是编写start.S的代码:图1-3:

    .text

    .global _start

    _start:

        mov r1,#11

        mov r2,#22

        mov r3,#33

    图1-3

    上面已经编写好了汇编程序代码start.S,接下来就是编写它的Makefile,只是这一次的Makefile工程里,因为只有一个start.S汇编文件,就不使用lds链接文件了,免得大材小用的工具,直接链接地址。指定直接链接地址的格式:-Ttext 地址。最后的Makefile的代码:Makefile:图1-4:

    all: start.o

        arm-linux-ld -Ttext 0x50008000 -o gboot.elf $^

        

    %.o : %.S

        arm-linux-gcc -g -o $@ $^ -c

    .PHONY: clean

    clean:

        rm *.o *.elf

    图1-4

    整个简单的过程就两个文件:图1-5:

    图1-5

    接下来就是按照前面的,来导入eclipse,配置调试环境,启动调试。

    这里链接的过程就不详细了。有疑问的可以参考第五节:Eclipse集成开发环境。链接好了之后,成功进行了裸机调试,进入刚才编写的汇编代码:图1-5:

    图1-5

    按一下F6,单步调试,可以看到运行到了第二条汇编代码。图1-6:

    图1-6

    运行了之后,可以看到r1的值被赋值为了11。图1-7:

    图1-7

    接着按F6,执行下一条汇编指令。图1-8:

    图1-8

    可以看到上面,裸机代码正常运行了。

  • 相关阅读:
    UE如何区分PDSCH中传输的DCCH和DTCH呢?
    LTE RLC 子层
    LTE的两篇微文
    TD-LTE中S1接口不支持的功能有哪些
    LTE系统消息SIB
    【转载】LTE – TTI Bundling技术
    关于lte上行闭环功控,下面哪个信道不能进行闭环功控
    lte每个小区有多少个可用的随机接入前导码
    LTE的物理小区标识(PCI)
    (转)MVC一个页面多个submit
  • 原文地址:https://www.cnblogs.com/FORFISH/p/5188698.html
Copyright © 2020-2023  润新知