1 为什么要写这篇博客
虽然近些年嵌入式开发都使用C语言,但是涉及到很底层的实现的时候,还是得用汇编来实现。所以必须要掌握基本的汇编指令。本篇博客意在讲解一些常用到的汇编指令,算是一个成长积累的过程。后续遇到的汇编指令都会记录到本博客中。
2 常用汇编指令学习
2.1 MRS指令
MRS指令的格式为:
MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR)
MRS指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下两种情冴:
Ⅰ.当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。
Ⅱ.当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。
指令示例:
MRS R0,CPSR @传送CPSR的内容到R0
MRS R0,SPSR @传送SPSR的内容到R0
2.2 MSR指令
MSR指令的格式为:
MSR{条件} 程序状态寄存器(CPSR或SPSR)_<域>,操作数
MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。<域>用于设置程序状态寄存器中需要操作的位,32位的程序状态寄存器可分为4个域:
位[31:24]为条件标志位域,用f表示;
位[23:16]为状态位域,用s表示;
位[15:8]为扩展位域,用x表示;
位[7:0]为控制位域,用c表示;
该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在MSR指令中指明将要操作的域。
指令示例:
MSR CPSR,R0 @传送R0的内容到CPSR
MSR SPSR,R0 @传送R0的内容到SPSR
MSR CPSR_c,R0 @传送R0的内容到SPSR,但仅仅修改CPSR中的控制位域