野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17420|回复: 0

详细学习ARM 汇编指令(一)

[复制链接]
发表于 2015-1-8 15:06:14 | 显示全部楼层 |阅读模式
本帖最后由 nettui 于 2015-1-8 15:10 编辑

    学习ARM已经两三年了,但是对于汇编这一块时钟感觉有些地方难以掌握,尤其是涉及到伪指令和协处理器指令,更是无从下手,今天决定抽时间来总结一下。
  首先回忆下ARM汇编的相关基本知识,汇编语言在ARM中一般用在启动代码中,比如Bootloader 初始化时对 CPU 和 协处理器 等进行初始化, 此时没有建立起 C 语言运行环境, 这个时候使用汇编语言执行初始化操作;除此之外,汇编效率比较高, 在Linux 内核中对效率有特殊要求的地方也会使用汇编语言来编写。
    汇编语言可以分为ARM标准汇编语言和GNU汇编语言两种,他们使用的地方是不同的,一般来说ARM标准汇编语言适用于ARM公司的汇编器, 适合在 Windows 平台使用, 如ADS;而GNU汇编语言适用于 Linux 平台交叉编译工具链的汇编器。
    ARM汇编语言有个固定的模板:


  1. .section .data
  2. < 初始化的数据>
  3. .section .bss
  4. < 未初始化的数据>
  5. .section .text
  6. .global _start
  7. _start:

复制代码

程序入口 : "_start:" 是汇编程序的入口, 相当于 main();

标注入口 : 使用 ".global _start" 标注程序入口, 外部才可以识别这是程序入口;
标明代码段 : ".section .text" 标明这是一个代码段;
标明 bss 段 : 使用 ".section .bss" 标明bss段, 如果没有 bss 段 和 数据段, 直接从 .text 开始;
  下面我们来搭建汇编开发调试环境


程序代码 :
定义代码段 : .text ;
定义程序入口 : .globl _start;
代码示例 :

  1. .text
  2. .globl _start
  3. _start:
  4. mov r1,#1
  5. mov r2,#2
  6. mov r3,#3
复制代码


Makefile 代码 :
链接 elf 格式文件 : 设置程序起始位置 6410板子是 0x50008000 地址;
在 arm-linux-ld 指定程序起始地址 : 在 -Ttext 50008000 即可;
如果使用链接器脚本指定地址 : 注意第三行指定程序起始地址;
  1. SECTIONS
  2. {
  3. . = 0x50008000;

  4. . = ALIGN(4);
  5. .text :

  6. {
  7. led.o   (.text)
  8. *(.text)
  9. }
  10. . = ALIGN(4);
  11. .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

  12. . = ALIGN(4);
  13. .data : { *(.data) }
  14. . = ALIGN(4);
  15. .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
  16. }
复制代码



代码示例 :

  1. all:start.o
  2. arm-linux-ld -Ttext 0x50008000 -o start.elf $^

  3. [[[[%]]]].o:[[[[%]]]].S
  4. arm-linux-gcc -g -o $@ $^ -c
  5. clean:
  6. rm -rf *.o *.elf
复制代码



(2) 启动 jtag 调试
转自物联网博客:http://www.iotblog.cn/u/lixiaomei/b-190,由于发帖字数限制未能全部转载,大家可以直接到原文查看!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 23:50 , Processed in 0.055646 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表