ARM汇编 - (3) ARM数据处理指令
<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);"><opcode> {<cond>} {S} <Rd> ,<Rn>{,<operand2>}</span></p><p style="text-indent: 0em;">其中<>号内的项是必须的,{} 号内的项是可选的。各项的说明如下:</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<<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('/uploads/AilsonJack/2018.08.30/1535642914698720.png')"/></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('/uploads/AilsonJack/2018.08.30/1535642915731643.png')"/></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('/uploads/AilsonJack/2018.08.30/1535642914934125.png')"/></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('/uploads/AilsonJack/2018.08.30/1535642916193908.png')"/></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>
暂无评论,要不要来个沙发
发表评论
JLink V9掉固件修复(灯不亮) 3Zephyr笔记2 - 在STM32F429上运行HelloWorld 2计算NandFlash要传入的行地址和列地址 1Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式 0Linux MMC子系统 - 5.eMMC 5.1工作模式-引导模式 0Linux MMC子系统 - 4.eMMC 5.1常用命令说明(2) 0
标签云
Linux嵌入式实用技巧ARM内核学习问题集合CC++编程语言阅读笔记汇编Linux内核完全注释Windows驱动开发计算机基础ARM11ARMv7-ASTM32IDESublimeLinux内核学习eMMCMMC子系统Ubuntu操作系统OfficeVMWareAPUEgccRTOS中断漫游世界随笔感悟开发工具软件应用编程VsCodearmccarmclang编译器ZephyrSPIJLink网卡驱动安装各种芯片库函数NFSμCOS内核sambaFlashUnix命令与脚本输入法Linux内核设计与实现gitRIFFWAVJATGFTPar8161安装centos有线上网μCGUI字库工程建立右键菜单网络文件系统Firefox百度NTFS文件系统CodeBlocksCentOS数据结构算法PhotoShop51KeilQTUltraEditscanfglibc宏定义UIDGID优先级娱乐天地SourceInsight磁盘扇区总线I2CPDFBComparePythonI2SFPUMakefileSWDCPUARP软件推荐FileZilla