ARM《2》_ARM的GNU汇编语言
0、前言:
- 这部分笔记就会比较简陋一些,先实现功能,后面有时间再深究原理
1、arm指令环境配置:
1.1、安装:ARM工具链
- 名称:arm-none-linux-gnueabi
- 作用:
- 安装说明:在安装arm-2011.09-70-arm-none-linux-gnueabi.exe时,先设置属性——兼容性——以win7兼容模式运行;
- 安装说明:安装设置中选择type模式,在安装路径设置中不要出现空格和中文,设置为环境变量时选择为所有用户设置环境变量,图标路径和安装路径一致,预览之后,install即可;
1.2、安装芯片扩展包【MDK79525.exe】
1.3、新建keil项目,配置项目环境
- 在keil中新建项目,芯片选择Samsung的S3C2410A,在弹出框中,选择不复制S3C2410A到项目路径。在工程目录下,创建一个start.S文件。右击keil中的项目文件夹,添加start.S到项目中,配置keil中arm汇编的编译工具为GNU for ARM,路径就是刚才安装的arm的路径,在keil中配置链接器脚本文件(下文会做说明);
1.4、测试环境
- 在start.S中写入
.global _start
.text
_start:
mov r0,#3
mov r1,r0
.end
- 用keil编译不报错,则环境配置正确。
2、基础知识:
2.1、CPU工作流程
- CPU的核心是控制单元、运算单元、存储单元

2.1、add_ARM的CPU执行指令的流程:
- 取指令——译码——执行指令——修改指令计数器指向下一条指令;
- 取指令:CPU控制器从内存中读取一条指令并放入到指令寄存器中。
- 指令译码:指令寄存器中的指令经过译码,决定该指令进行何种操作(就是指令里的操作码)、操作数在哪里(操作数的地址)。
- 执行指令:分两个阶段,取操作数和进行运算。
- 修改指令计数器:指令计数器指向下一条指令的地址。
2.2、汇编语言的本质:
- 汇编语言实质是 机器指令 (机器码)的助记符,是一种低级的符号语言;
- 每一款cpu都有属于自己的汇编语言,arm的汇编语言有两种,一种是arm官方的,一种是gun组织的;
- 越高级的语言越人性化,汇编就是一种人性化很差的语言;
2.3、CISC体系和RISC体系:
- CISC:Complex instruction set computer,复杂指令集,这个体系的设计理念就是用丰富的指令来满足各种运算任务,CISC 类型的 CPU内部工艺复杂,功耗高,好处是汇编好写;
- RISC: Reduced instruction set computer,精简指令集,这个体系提供指令较少,CPU工艺简单,编程就比较复杂了【例如:ARM体系的CPU,常用指令只有30个】
- CPU发展方向:从CISC——RISC——两者结合;
2.4、统一编址和独立编址
- CPU访问各种外设有2种方式:一种是类似于访问内存的 方式,即把外设的寄存器当作一个内存地址来读写,从而用与访问内存相同的方式来操作外部设备,这种方式叫做IO与内存统一编址方式;另一种是使用专用的CPU指令来访问某种特定外设,这种方式叫做IO与内存独立编址。
- 统一编址:就是内存和外设的地址划分在了同一个地址范围内来规划,被外设占用了的地址就不能给内存了,反之给内存占用了的地址范围就不能给外设了,比如给外设分配的地址范围为0 ~ N,那么内存就不能用0 ~ N了,只能用N+1 ~ M。【假如CPU一共16根总线,内存用8根,剩下8根,摄像头用4根,触摸板用4根】
- 独立编址:内存和外设分开独立编址(它们的地址原则上有可以重合区域),因为独立,所以内存可以从0 ~ N,外设的地址范围也可以从0 ~ N。【假如CPU有16根总线,就得设计两套电路系统,内存用16根,外设用16根】
