资料介绍
6.3 SUB减操作指令
1.指令的编码格式
SUB(Subtract)减操作指令,从寄存器《Rn》中减去《shifter_operand》表示的数值,并将结果保存到目标寄存器《Rd》中,并根据指令的执行结果设置CPSR中相应的标志位。
指令的编码格式如图6.4所示。
图6.4 EOR指令的编码格式
2.指令的语法格式
SUB{《cond》}{S} 《Rn》,《Rn》,《shifter_operand》
① 《cond》
为指令编码中的条件域。它指示指令在什么条件下执行。当《cond》忽略时,指令为无条件执行(cond=AL(Alway))。
② 《S》
S位(bit[20])决定指令的执行是否影响CPSR中的条件域。当S位清0时,指令执行不影响CPSR。当S位置位时(并且不是r15),则有以下规则。
· 如果结果为负,则标志位N置位;否则清0(也就是说N等于结果的第31位)。
· 如果结果为0,则标志位Z置位;否则清0。
· 当操作定义为算术操作(ADD、ADC、SUB、SBC、RSB或RSC)时,标志位C设置为ALU的进位输出;否则设置为移位器的进位输出。如果不需要移位,则保持C。
· 在非算术操作中,标志位V保持原值。在算术操作中,如果有从第30位到第31位的溢出,则置位;如果不发生溢出,则清0。仅当算术操作中操作数被认为是2的补码的有符号数时,这个标志位才有意义,而且指示结果超出范围。
若指令中的目标寄存器《Rd》为r15,则当前处理器模式对应的SPSR的值被复制到CPSR寄存器中。用户模式和系统模式下,由于没有相应的SPSR,指令的执行结果不可预知。
③ 《Rd》
指定目标寄存器。
④ 《Rn》
指定第一个源操作数寄存器。
⑤ 《shifter_operand》
使用ARM的通用寻址模式确定第二个源操作数。它影响指令编码格式中的I(bit[25])位和shifter_operand(bits[11∶0])位。
注意在操作时要特别小心C标志位的设置。当C=1时,表示减操作没有借位发生;当C=0时,说明减操作发生了借位。也就是说C标志位在这里被用作了非借位标志。
3.指令操作的伪代码
指令操作的伪代码如下面程序段所示。
If ConditionPassed{cond} then
Rd=Rn - shifter_operand
If S==1 and Rd==r15 then
CPSR=SPSR
Else if S==1 then
N flag=Rd[31]
Z flag=if Rd==0 then 1 else 0
C flag=NOT BorrowForm{Rn – shifter_operand}
V flag=OverflowFrom{Rn – shifter_operand}
4.指令举例
【例6.3】SUB指令举例。
(1)R0=R1-R2
SUB R0, R1, R2
(2)R0=R1-256
SUB R0, R1, #256
(3)R0=R2-(R3《《1)
SUB R0, R2, R3,LSL#1
1.指令的编码格式
SUB(Subtract)减操作指令,从寄存器《Rn》中减去《shifter_operand》表示的数值,并将结果保存到目标寄存器《Rd》中,并根据指令的执行结果设置CPSR中相应的标志位。
指令的编码格式如图6.4所示。
图6.4 EOR指令的编码格式
2.指令的语法格式
SUB{《cond》}{S} 《Rn》,《Rn》,《shifter_operand》
① 《cond》
为指令编码中的条件域。它指示指令在什么条件下执行。当《cond》忽略时,指令为无条件执行(cond=AL(Alway))。
② 《S》
S位(bit[20])决定指令的执行是否影响CPSR中的条件域。当S位清0时,指令执行不影响CPSR。当S位置位时(并且不是r15),则有以下规则。
· 如果结果为负,则标志位N置位;否则清0(也就是说N等于结果的第31位)。
· 如果结果为0,则标志位Z置位;否则清0。
· 当操作定义为算术操作(ADD、ADC、SUB、SBC、RSB或RSC)时,标志位C设置为ALU的进位输出;否则设置为移位器的进位输出。如果不需要移位,则保持C。
· 在非算术操作中,标志位V保持原值。在算术操作中,如果有从第30位到第31位的溢出,则置位;如果不发生溢出,则清0。仅当算术操作中操作数被认为是2的补码的有符号数时,这个标志位才有意义,而且指示结果超出范围。
若指令中的目标寄存器《Rd》为r15,则当前处理器模式对应的SPSR的值被复制到CPSR寄存器中。用户模式和系统模式下,由于没有相应的SPSR,指令的执行结果不可预知。
③ 《Rd》
指定目标寄存器。
④ 《Rn》
指定第一个源操作数寄存器。
⑤ 《shifter_operand》
使用ARM的通用寻址模式确定第二个源操作数。它影响指令编码格式中的I(bit[25])位和shifter_operand(bits[11∶0])位。
注意在操作时要特别小心C标志位的设置。当C=1时,表示减操作没有借位发生;当C=0时,说明减操作发生了借位。也就是说C标志位在这里被用作了非借位标志。
3.指令操作的伪代码
指令操作的伪代码如下面程序段所示。
If ConditionPassed{cond} then
Rd=Rn - shifter_operand
If S==1 and Rd==r15 then
CPSR=SPSR
Else if S==1 then
N flag=Rd[31]
Z flag=if Rd==0 then 1 else 0
C flag=NOT BorrowForm{Rn – shifter_operand}
V flag=OverflowFrom{Rn – shifter_operand}
4.指令举例
【例6.3】SUB指令举例。
(1)R0=R1-R2
SUB R0, R1, R2
(2)R0=R1-256
SUB R0, R1, #256
(3)R0=R2-(R3《《1)
SUB R0, R2, R3,LSL#1
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 位操作指令 3次下载
- 超标量处理器的指令乱序提交机制综述 13次下载
- Thumb数据处理指令 0次下载
- 数据处理指令之 BIC位清零指令解析 1次下载
- 数据处理指令之TST测试指令分析 1次下载
- 数据处理指令之TEQ测试相等指令分析 1次下载
- 数据处理指令之SBC带进位的减法指令分析 2次下载
- 数据处理指令之RSC带进位的翻转减指令分析 2次下载
- 数据处理指令之RSB减翻转指令分析 2次下载
- 数据处理指令之ORR逻辑或指令 2次下载
- 数据处理指令的寻址方式解析 2次下载
- 数据传送指令之MOV指令 4次下载
- 数据处理指令CMN之负数比较指令分析 1次下载
- 数据处理指令之ADD加操作指令 1次下载
- WinPEsoft指令手册 16次下载
- 一文详解PLC转换指令 1884次阅读
- 讲讲ARM指令集格式以及常用的ARM汇编指令 817次阅读
- 电路块ANB指令与ORB指令操作 2512次阅读
- 西门子S7-1200PLC移动操作指令:读取域和写入域指令 1105次阅读
- SIMATIC S7-1500 PLC减指令(SUB)指令简述 2956次阅读
- 指令周期的四个阶段详解 3.5w次阅读
- 什么是位逻辑指令? 5795次阅读
- 单片机位处理指令的使用方法 2328次阅读
- CPU操作指令详解 9388次阅读
- 指令和伪指令分得清吗? 6097次阅读
- 浅谈ARM伪指令地址读取 1885次阅读
- 协处理器的三大类数据传送指令 1978次阅读
- thumb指令集是什么_thumb指令集与arm指令集的区别 1.7w次阅读
- ARM微处理器助记符指令及其功能描述 2355次阅读
- ARM微处理器的指令的分类与格式 1247次阅读
下载排行
本周
- 1东芝BiCD集成电路硅单片TB67S109AFNAG数据手册
- 1.93 MB | 5次下载 | 免费
- 2SP3060A/30120A/30160A/30320A/30520A系列数字合成扫频仪使用说明书
- 4.16 MB | 3次下载 | 1 积分
- 3具有双通道 DC-DC转换器、由串行接口控制的9通道电机驱动器TPIC2010数据表
- 1.15MB | 2次下载 | 免费
- 4USB Type-C PD快充协议智能触发芯片FS312B数据手册
- 0.75 MB | 1次下载 | 免费
- 5USB Type_C PD快充协议智能触发芯片FS8025B数据手册
- 1.29 MB | 1次下载 | 免费
- 6触摸按键PCB 设计要点V01
- 1.42 MB | 1次下载 | 免费
- 75V升压充电两串锂电池充电管理IC FS4058数据手册
- 2.98 MB | 次下载 | 免费
- 8真关断同步升压IC FS2009数据手册
- 2.08 MB | 次下载 | 免费
本月
- 1DCDC原理详解
- 0.98 MB | 63次下载 | 免费
- 2allegro快速入门教程
- 1.98 MB | 36次下载 | 免费
- 3FU-7(807)胆机原理图
- 11.93 MB | 25次下载 | 1 积分
- 4用于汽车应用的高压电源管理IC TPS65311-Q1数据表
- 1.05MB | 22次下载 | 免费
- 5电子元件基础知识介绍
- 8.76 MB | 13次下载 | 2 积分
- 6华为海思Ascend 310芯片的资料说明
- 0.12 MB | 10次下载 | 10 积分
- 7GD32F10x系列MCU用户手册
- 11.5MB | 9次下载 | 免费
- 86A 输出电流同步降压稳压器TPS65286数据表
- 2.05MB | 6次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935083次下载 | 免费
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420045次下载 | 免费
- 3Altium DXP2002下载入口
- 未知 | 233067次下载 | 免费
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191308次下载 | 免费
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183308次下载 | 免费
- 6labview8.5下载
- 未知 | 81567次下载 | 免费
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73785次下载 | 免费
- 8NI LabVIEW中实现3D视觉的工具和技术
- 未知 | 70088次下载 | 免费
评论
查看更多