ARM汇编 - (3) ARM数据处理指令
 2018.08.31    |      汇编    |     AilsonJack    |     暂无评论    |     1119 views
By: Ailson Jack
Date: 2016-04-14
个人博客: http://www.only2fire.com/
<p style="text-indent: 2em;">ARM的数据处理指令大致可以分为3类:<span style="color: rgb(255, 0, 0);">数据传送指令</span>,<span style="color: rgb(255, 0, 0);">运算指令</span>,<span style="color: rgb(255, 0, 0);">比较指令</span>。</p><p style="text-indent: 2em;">数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有ARM数据传送或算术逻辑运算指令均可选择使用S后缀,以使指令影响CPSR中的标志。<br/></p><p class="artical_littlestyle1">1、ARM指令集-基本指令格式</p><p style="text-indent: 0em;">ARM是三地址指令格式,指令的基本格式如下:</p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">&lt;opcode&gt;&nbsp; {&lt;cond&gt;}&nbsp; {S}&nbsp; &lt;Rd&gt; ,&lt;Rn&gt;{,&lt;operand2&gt;}</span></p><p style="text-indent: 0em;">其中&lt;&gt;号内的项是必须的,{} 号内的项是可选的。各项的说明如下:</p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">opcode</span>:指令助记符;</p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">cond</span>:执行条件;<br/></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">S</span>:是否影响CPSR寄存器的值;<br/></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">Rd</span>:目标寄存器;<br/></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">Rn</span>:第1个操作数的寄存器;<br/></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">operand2</span>:第2个操作数;<br/></p><p style="text-indent: 2em;">灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式:<br/><span style="background-color: rgb(118, 146, 60);">1)、</span>#immed_8r——常数表达式:<br/></p><p style="text-indent: 2em;">如:<span style="color: rgb(0, 112, 192);">ADD R0, R1, #3 ;R0 = R1 + 3</span><br/><span style="background-color: rgb(118, 146, 60);">2)、</span>Rm——寄存器方式:<br/></p><p style="text-indent: 2em;">如:<span style="color: rgb(0, 112, 192);">SUB R0, R1, R2 ;R0 = R1 – R2</span><br/><span style="background-color: rgb(118, 146, 60);">3)、</span>Rm,shift——寄存器移位方式:<br/></p><p style="text-indent: 2em;">如:<span style="color: rgb(0, 112, 192);">ADD R0, R1, R2, LSL, #3 ;R0 = R1 + R2&lt;&lt;3</span><br/></p><p class="artical_littlestyle2">2、数据传送指令</p><p style="text-indent: 2em;">ARM的数据传送指令有两条,如下所示:<br/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.30/1535642914698720.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.30/1535642914698720.png&#39;)"/></p><p style="text-indent: 2em;">注:当后缀有S时,这些指令根据结果更新标志N和Z,在计算Operand2时更新标志C,不影响标志V。</p><p class="artical_littlestyle3">3、运算指令</p><p style="text-indent: 0em;"><span style="background-color: rgb(118, 146, 60);">1)、</span>算术运算指令<br/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.30/1535642915731643.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.30/1535642915731643.png&#39;)"/></p><p style="text-indent: 2em;">注:当后缀有S时,这些指令根据结果更新标志N、Z、C、V。<br/><span style="background-color: rgb(118, 146, 60);">2)、</span>逻辑运算指令<br/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.30/1535642914934125.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.30/1535642914934125.png&#39;)"/></p><p style="text-indent: 2em;">注:当后缀有S时,这些指令根据结果更新标志N和Z,在计算Operand2时更新标志C,不影响标志V。<br/></p><p class="artical_littlestyle4">4、比较指令</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.30/1535642916193908.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.30/1535642916193908.png&#39;)"/></p><p style="text-indent: 2em;">注:这些指令直接影响N,Z,C和V标志位(不需要加后缀S)。</p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">MOV R0, #3<br/></span></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">CMN R0, #-2 ;Z=0<br/></span></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">CMN R0, #-3 ;Z=1</span><br/></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">CMN</span>可以理解为,判断两个数是否互为相反数。<br/></p>
欢迎关注博主的公众号呀,精彩内容随时掌握:
热情邀请仔细浏览下博客中的广告,万一有对自己有用或感兴趣的呢。◕ᴗ◕。。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^,当然了能够赞赏博主,那就非常感谢啦!
注: 转载请注明出处,谢谢!^_^
转载请注明来源: 本文链接:  By: AilsonJack
ARM汇编 - (3) ARM数据处理指令  |  说好一起走
暂无评论,要不要来个沙发
发表评论

 
Copyright © 2015~2023  说好一起走   保留所有权利   |  百度统计  蜀ICP备15004292号