L12D5 ARM汇编指令集

一、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语言能学,因为汇编语言所需要的编绘知识很多也很复杂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值