您的位置 首页 硬件

ARM裸机开发bootloader汇编语言

一、汇编语言概述1、为什么要使用汇编一般情况下我们不会用到汇编,但有两种情况下,我们要用到汇编。1、启动代码。编写bootloader和内核时…

一、汇编言语概述

1、为什么要运用汇编

一般情况下咱们不会用到汇编,但有两种情况下,咱们要用到汇编。

1、发动代码。编写bootloader和内核时运用,主要是对cpu和内存进行初始化时运用,由于这个时分还没有c言语的环境(仓库还没有树立),所以不能用c言语。

2、高功率的特别需求。由于汇编言语的碑文功率要高于c言语,所以对某些对功率要求高的程序要用到汇编,可所以汇编与c言语的混合编程。

2、汇编分类

1、ARM规范汇编,适用于windows平台下ARM公司开发的汇编器ADS。

2、GNU汇编,linux平台下GNU穿插编译东西链中的汇编器。它与ARM规范的一点不同是GNU汇编要在段符号符前加点,例如 .text。而ARM规范则不需求这个点。

3、汇编程序结构

(.section).text.global _start_start:<汇编代码>比如start.Sstart.S.text.global _start_start:mov r1 #1mov r2 #2mov r3 #3
makefile文件all:start.oarm-linux-ld -Ttext 0x50000000 -o start.elf $^start.o:start.Sarm-linux-gcc -g -c -o $@ $^clean:rm *.o *.elf

4、eclipse汇编和调试

调试之前要对调试进行设置,调试的对象是elf文件。还要输入初始化脚本,意图是对处理器进行初始化。

停止用Run-Terminate

二、汇编指令分类学习

1、算术与逻辑指令mov mvn add sub and bic

2、比较指令cmp tst

3、跳转指令b bl

4、移位指令lsl ror

5、程序状态字拜访指令msr mrs

6、存储器拜访指令ldr str

http://blog.csdn.net/quyang0602/article/details/7527496

http://yxmyifeng.blog.163.com/blog/static/12978978220100194272529/

.text.global _start_start:@存储器拜访指令mov r0, #0xfmov r1, #0xff@str r0, [r1]@ldr r2, [r1]@ 程序状态字拜访指令mrs r0, cpsrorr r0, r0, #0b100msr cpsr, r0@移位指令mov r1, #0b110000mov r1, r1, lsl#2mov r1, r1, ror#4@跳转指令mov r1, #6mov r2, #5cmp r1, r2bgt branch1b endbranch1:sub r3, r1, r2end:nopbl func1mov r1, r2func1:mov r1, r2mov pc, lr@比较指令mov r1, #2cmp r1, #1mov r1, #1cmp r1, #2mov r1, #1cmp r1, #1mov r1, #0b1011tst r1, #0b01mov r1, #0b1011tst r1, #0b100@算术与逻辑指令mov r1, #8mov r2, r1mov r3, #10mvn r1, #0b11mvn r2, #5mvn r3, r1mov r1, #9sub r2, r1, #4sub r3, r1, r2mov r1, #1mov r2, #2add r3, r1, #44add r3, r1, r2mov r1, #0b1011and r2, r1, #0b11mov r1, #0b1011bic r2, r1, #0b101

三、伪指令

1、ARM伪指令怎样界说

ARM伪指令没有对应的机器码,只要在编译过程中起作用,或许转化成其他实践碑文的指令来进行操作。

任何的CPU碑文的都是机器码,也便是二进制映像文件。

2、伪指令的学习方法

对elf文件进行反汇编,检查反汇编文件中伪指令是怎么转化为其他指令碑文的。

arm-linux-objdump -D -S

ARM的机器码是32位的整数,被分为几个段,每个段都有自己的含义。机器码与每条指令是一一对应的。

3、伪指令界说

.global大局

.data数据

.ascii字符串

.byte字节

.word字

.align对齐

.equ

.equ DA,0x89mov r0,#DA.align 4

4、操作类伪指令

nop 空指令,等效于 mov ro, ro 能够用于延时,确保时序要求。

ldr

mov ro, 0x1ff 这样界说就会犯错,由于mov的操作数最多只要8位,别的4位是左右移动一共位。

解决方案:

ldr ro, =0x1ff 等效于ldr r0, [pc, #-4]

四、ARM协处理器拜访指令

1、什么是协处理器

协处理器望文生义便是帮手的意思,协处理器能够协助中央处理器处理一些特定的业务,例如数学协处理器,就能够处理一些数学方面的运算。协处理器有自己的寄存器,cpu经过拜访协处理器的寄存器完成与协处理器的协同作业。

2、ARM的CP15

ARM最多达16个协处理器,CP15共供给了16组寄存器,下面是一段来自ARM11手册的CP15的原文介绍

The purpose of the system control coprocessor, CP15, is to control and provide status information for the functions implemented in the ARM1176JZF-S processor. The main functions of the system control coprocessor are:

1、overall system control and configuration

2、cache configuration and management

3、Tightly-Coupled Memory(TCM)紧耦合内存,功能相似cache

4、Memory Management Unit(MMU) configuration and management

5、DMA control

6、system performance monitoring.

3、协处理器的拜访指令

mcr和mrc,mcr完成通用寄存器数据向协处理器传送。mrc完成了协寄存器向通用寄存器的传送。

下面是一个比如(参阅ARM11手册编写)

.text.global _start_start:mrc p15, 0, r0, c0, c0, 0nop

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/265161.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部