ARM 汇编指令

来源:互联网 发布:java代码如何打包tar 编辑:程序博客网 时间:2024/06/16 00:17

1、str 指令

<code class="hljs avrasm has-numbering"> **- 格式** STR{条件}  源寄存器,<存储器地址> STR指令用亍从源寄存器中将一个<span class="hljs-number">32</span>位的字数据传送到存储器中。 **- 案例**STR <span class="hljs-built_in">R0</span>,[<span class="hljs-built_in">R1</span>],#<span class="hljs-number">8</span>   ;将<span class="hljs-built_in">R0</span>中的字数据写入以<span class="hljs-built_in">R1</span>为地址的存储器中,并将新地址<span class="hljs-built_in">R1</span>+<span class="hljs-number">8</span>写入<span class="hljs-built_in">R1</span>。STR <span class="hljs-built_in">R0</span>,[<span class="hljs-built_in">R1</span>,#<span class="hljs-number">8</span>]   ;将<span class="hljs-built_in">R0</span>中的字数据写入以<span class="hljs-built_in">R1</span>+<span class="hljs-number">8</span>为地址的存储器中。</code>

2、ORR指令(逻辑 或)

<code class="hljs avrasm has-numbering"> **- 格式**     ORR{条件}{S} 目的寄存器,操作数<span class="hljs-number">1</span>,操作数<span class="hljs-number">2</span>ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数<span class="hljs-number">1</span>应是一个寄存器,操作数<span class="hljs-number">2</span>可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数<span class="hljs-number">1</span>的某些位。 **- 案例**ORR <span class="hljs-built_in">R0</span>,<span class="hljs-built_in">R0</span>,#<span class="hljs-number">3</span>        ;该指令设置<span class="hljs-built_in">R0</span>的<span class="hljs-number">0</span>、<span class="hljs-number">1</span>位,其余位保持不变。</code>

3、BIC指令(位清零)

<code class="hljs avrasm has-numbering"> **- 格式**        BIC {条件} {S} 目的寄存器,操作数<span class="hljs-number">1</span>,操作数<span class="hljs-number">2</span>BIC指令用于清除操作数<span class="hljs-number">1</span>的某些位,并把结果放置到目的寄存器中。操作数<span class="hljs-number">1</span>应是一个寄存器,操作数<span class="hljs-number">2</span>可以是一个寄存器,被移位的寄存器,或一个立即数。 操作数<span class="hljs-number">2</span>为<span class="hljs-number">32</span>位的掩码,如果在掩码中设置了某一位,则清除这一位。未设置的掩码位保持不 变。 **- 案例**BIC <span class="hljs-built_in">R0</span>,<span class="hljs-built_in">R0</span>,#%<span class="hljs-number">1011</span>    ;该指令清除<span class="hljs-built_in">R0</span>中的位 <span class="hljs-number">0</span>、<span class="hljs-number">1</span>、和 <span class="hljs-number">3</span>,其余的位保持不变。</code>

4、MRS指令

<code class="hljs avrasm has-numbering"> **- 格式**    MRS{条件}    通用寄存器 程序状态寄存器(CPSR或<span class="hljs-built_in">SPSR</span>)MRS指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下两种情况:Ⅰ.当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。Ⅱ.当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。 **- 案例**MRS <span class="hljs-built_in">R0</span>,CPSR                         ;传送CPSR的内容到<span class="hljs-built_in">R0</span>MRS <span class="hljs-built_in">R0</span>,<span class="hljs-built_in">SPSR</span>                         ;传送 <span class="hljs-built_in">SPSR</span>的内容到<span class="hljs-built_in">R0</span></code>

5、MSR指令

<code class="hljs avrasm has-numbering"> **- 格式**     MSR{条件}    程序状态寄存器(CPSR或<span class="hljs-built_in">SPSR</span>)_<域>,操作数MSR指令用于将操作数的内容传送到程序状态寄存器的特定域中。其中,操作数可以为通用寄存器或立即数。<域>用于设置程序状态寄存器中需要 操作的位,<span class="hljs-number">32</span>位的程序状态寄存器可分为<span class="hljs-number">4</span>个域:位[<span class="hljs-number">31</span>:<span class="hljs-number">24</span>]为条件位域,用f表示;位[<span class="hljs-number">23</span>:<span class="hljs-number">16</span>]为状态位域,用s表示;位[<span class="hljs-number">15</span>:<span class="hljs-number">8</span>] 为扩展位域,用<span class="hljs-built_in">x</span>表示;位[<span class="hljs-number">7</span>:<span class="hljs-number">0</span>]    为控制位域,用c表示;该指令通常用于恢复或改变程序状态寄存器的内容,在使用时,一般要在MSR指令中指明将要操作的域。 **- 案例**MSR CPSR,<span class="hljs-built_in">R0</span>        ;传送<span class="hljs-built_in">R0</span>的内容到CPSRMSR <span class="hljs-built_in">SPSR</span>,<span class="hljs-built_in">R0</span>        ;传送<span class="hljs-built_in">R0</span>的内容到<span class="hljs-built_in">SPSR</span>MSR CPSR_c,<span class="hljs-built_in">R0</span>     ;传送<span class="hljs-built_in">R0</span>的内容到<span class="hljs-built_in">SPSR</span>,但仅仅修改CPSR中的控制位域</code>
0 0
原创粉丝点击