您的位置 首页 厂商

Arm指令集寻址方法

我这里讲的快速是指能够快速的上手工作,但任何一门学问都包含着比较具体的知识在里面,这些知识是需要长年累月的积累才可以逐渐从未知…

我这儿讲的快速是指可以快速的上手作业,但任何一门学识都包含着比较详细的常识在里面,这些常识是需求天长日久的堆集才可以逐步从不知道到已知,从蠢笨到娴熟.快速仅仅一种学常识的过程,可以在短的时刻里把那些不常用的常识排到后边来学习.

一些书中介绍,不需求了解汇编言语就可以进行Arm的编程,我想关于一般的开发者来讲C言语大约是够用了,但不了解汇编,许多原理性和底层的作业就会做起来困难了.即要快速,又要确保必定的汇编常识,那么学的时分可以蜻蜓点水的看一下,至少有个形象,再今后假如碰到的时分,逐步学习和加深就可以了.

回忆是比较苦涩的工作,我觉得运用比如最好的办法,比如再加查找,今后用起来比较便利.前面讲过,Arm中有两种指令集,一种叫Arm指令集,一种叫Thumb指令集.材料中运用了一大堆理由说Thumb的16位指令集比Arm 32位指令集要性能好,这是由于它不彻底等同于PC的32 80386指令集与8086/8088的16位指令集的差异,再详细的原因关于初学者可以不去理睬.

咱们讲一下Arm 32位指令集的寻址方法:

1. 寄存器寻址:

MOV R1,R2;读取R2的值到R1中

SUB R0,R1,R2;将R1的值减去R2的值,成果保存到R0中

2.当即寻址:

SUBSR0,R0,#1;R0减1,成果保存到R0中,并影响标志位

MOV R0,#0xFF000 ;将0xFF000存储到R0中

3. 寄存器移位寻址:

MOV R0,R2,LSL #3;R2的值左移3位,成果存入R0

ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后与R1相与,成果存入R1.

移位操作有这样几种: LSL,LSR,ASR,ROR,RRX,详细意义可以查相关手册

4.寄存器直接寻址:

LDRR1,[R2];将R2指向的存储单元的数据读出,保存到R1中

SWPR1,R1,R[2] ;将R1的值与R2指定的存储单元的值进行交流.

5.基址寻址:

LDRR2,[R3,,0x0C];读取R3+0x0C地址上的存储单元的内容,存入R2中

STRR1,[R0,#-4]!;先R0=R0-4,然后把R1的值保存到R0指定的存储单元

LDRR1,[R0,R3,LSL #1];将R0+R3*2地址上的存储单元中的内容读出,保存到R1中.

6.多寄存器寻址:

LDMAR1! {R1-R7,R12};将R1指向单元的数据读出,放到R1~R7,R12中,R1主动加1

STMIAR0!,{R2-R7,R12};与上面方向相反,R0主动加1

我总感觉书中写的方向不对

7.仓库寻址:

STMFD SP!,{R1-R7,LR}

LDMFD SP!,{R1-R7,LR}

可以参阅前面的比如,只不过是仓库SP寄存器罢了

8.块复制寻址:

STMIA R0,{R1-R7}

STMIB R0,{R1-R7}

STMDA R0! {R1-R7}

STMDB R0! {R1-R7}

9.相对寻址:

BLSUBR1;调用到SUBR1子程序

BEQ LOOP;条件跳转到LOOP标号处

所谓寻址方法,便是指令的表达方法,这种表达方法大约了解了,也就比较简单了解各种指令的意义了.汇编是种学起来比较厌烦的东西,不同CPU系列的计算机汇编言语都不共同,不像高档言语那样,语法比较共同,并且指令会许多,寻址方法也不同,关于常时刻仅仅有同一种CPU的汇编编程的人来讲,汇编也不是什么难事,但关于作业范围比较广的开发者来讲,回忆指令的确是个费事的工作.幸亏现在大多单片机都可以运用C言语来编程,但对汇编的了解仍是有优点的,它可以协助你了解更底层的问题.

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部