一、ARM指令集导学
指令集
CPU内部实现不需要考虑,考虑如何使用指令集
汇编和C语言最大的区别:每条汇编都会唯一对应一条机器码,每条C语言都要被编译器编译成若干条汇编指令。
CPU可以直接识别和执行汇编,但C语言不一定
编译器将程序员和CPU隔绝开来,程序员不用考虑怎么实现,只需要编写正确的代码,对接编译器运行成功
越高级的语言越远离原理,越低级的语言越贴近原理
学习汇编可以了解CPU执行原理,从而更好的把控设计过程,从而写出更高效的代码
二、keil仿真环境搭建
(一)仿真
硬件仿真的流程
程序下载到CPU执行-通过硬件接口或仿真器把CPU的执行状态读取出来
硬件仿真效率较低,仿真器成本高。每次写程序下载到CPU,连仿真器,在电脑上看终端,程序出错还要重新该改序,编译,下载,连终端
(二)Keil
IDE:集成开发环境,将编辑器、编译器、仿真器、调试器集成一个软件
(三)搭建Keil环境
安装包见附件
区分gcc,乌班图上对应的是x86处理器的gcc,本节需要下载arm-gcc
(四)创建一个工程
1、创建一个工程
选择cpu,这里选择一个与ARM运行类似的处理器
2、创建一个文件
此时,工程和文件还没有关系
3、将文件添加进工程
4、指定编译器
arm-none-linux-gnueabi-
C:\Program Files (x86)\CodeSourcery\Sourcery_CodeBench_Lite_for_ARM_GNU_Linux
5、设置代码存储地址
(五)用汇编代码进行仿真
1、编写代码
2、debug进入仿真
三、ARM指令集概述
汇编指令集
C语言:
1、语句 C++
2、注释 //
3、预编译指令
不参加编译只告诉编译器怎么编译
#if 1
...
#else
...
#endif
汇编:
1、指令:能够编译生成一条32bit机器码 并且能被CPU识别和执行
2、伪指令:3*3->3+3+3 CPU不能直接认识 但是可以经过编译器翻译成他能直接认识的指令
伪指令本身不是指令,编译器可以将其替换成若干条指令
3、伪操作:不会生成代码,不会生成指令,只是在编译阶段告诉编译器怎么编译
ARM指令集:
1、数据处理指令:应用最多,进行数学运算与逻辑运算的指令
2、跳转指令:实现程序跳转 本质是修改PC
3、Load/srore指令:访问(读写)内存。CPU拿数据/把数据放回内存
4、状态寄存器传送指令:对CPSR寄存器只能用状态寄存器传送指令,用于访问(读写)CPSR
5、软中断指令:触发异常,给CPU发送中断信号
6、协处理器指令:操控协处理器的指令
处理浮点型数据
1)通过编译器换成一堆简单操作,软件耗时长
2)在ARM外围加一个协处理器
1.简述C语言和汇编语言的本质区别是什么?
每条汇编都会唯一对应一条机器码,每条C语言都要被编译器编译成若干条汇编指令。
1、汇编语言实质上是机器语言的助记符,是直接面对CPU的语言,所以汇编语言的运行效率比C语言高;
2、汇编语言对硬件的可操控性强,C语言硬件可操控性比较差;
3、汇编语言的目标代码体积小,C语言目标代码体积大;
4、汇编语言不易维护,C语言容易维护;
5、汇编语言可移植性很差,C语言可移植性很好;
6、汇编语言比C语言能学,因为汇编语言所需要的编绘知识很多也很复杂。