【嵌入式菜鸟成长记——逃不过的汇编指令1】终究逃不过的ARM汇编语言

大学里学了微机原理,里面学了汇编指令,考完试后就忘得一干二净;后面汇编也用的少,以至于都完了;以为自己学的C语言,用不到汇编的;虽然经常见到,但是都果断跳过,直到要学习FREERTOS,不得不接触ARM内核,不得不学习汇编;哎,终究逃不过去的,都是自欺欺人罢了;

 

现在将自己遇到的汇编都记录下来,一点点增加自己的汇编指令吧;

 

想想为什么自己这么不喜欢汇编呢,其实最主要的原因就是太多了,记不住,懒得记;

 

现在写一条汇编,尽量找个方法记下他;

 

话不多说,直接写第一个;

1.MRS      mrs          ->         状态寄存器 到 通用寄存器的传送指令

  (有的汇编是小写的,所以大小写都写出来,熟悉大写和小写的方式,不至于以后认不出来)

语法格式:

MRS{<cond>}<Rd>, CPSR

MRS{<cond>}<Rd>, SPSR

其中:

<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。

<Rd>为目标寄存器。

(因为汇编是助记词,所以本质是二进制代码,写出格式更加清楚,可能后面有些不会写出来)

实例:

   -》      读取进程栈指针,保存在寄存器 R0 里面

 2 MSR               mrs                     -》     通用寄存器到状态寄存器的传送指令。

指令的使用:
MSR指令通常用于恢复状态寄存器的内容或者改变寄存器的内容。

当退出异常中断处理器程序时,如果事先保存了状态寄存器的内容通常通过MSR指令将事先保存的状态寄存器内容恢复到状态寄存器中。

当需要修改状态寄存器的内容时,通过“读取-修改-写回”指令序列完成。写回操作也是通过MSR指令完成的。

 3.   ISB     isb                          -》                      指令同步隔离

最严格:它会清洗流水线,以保证所有它前面的指令都执行完毕之后,才执行它后面的指令。

DSB
数据同步隔离。比 DMB 严格: 仅当所有在它前面的存储器访问操作
都执行完毕后,才执行在它后面的指令(亦即任何指令都要等待存储器访 问操作——译者注) 

 

 

STR指令的格式为:
STR{条件}  源寄存器,<存储器地址>
STR指令用亍从源寄存器中将一个32位的字数据传送到存储器中。

 

stmdb

 

 

 

b用于不返回的跳转,比如跳到某个标号处,b  .  其中的‘.’代表当前地址,那么 b  .  就是死循环。

bl用于子程序跳转,要返回地址,返回地址存于LR中。当发生bl跳转前,会在寄存器 R14 (即LR)中保存当前PC-4,即bl跳转指令的下一条指令的地址。所以在返回时只要 MOV pc,lr 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值