第4章.ARM7指令系统(4.2ARM指令).ppt

第4章.ARM7指令系统(4.2ARM指令)

简单的ARM程序 简单的ARM程序 4.21 指令格式 第2个操作数 第2个操作数 第2个操作数 第2个操作数 第2个操作数 第2个操作数 第2个操作数 4.22 条件码 条件码 4.23 存储器访问指令 4.24 ARM数据处理指令 4.25 乘法指令 4.26 分支指令 4.27 协处理器指令 4.28 杂项指令 4.29 ARM伪指令 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。 ADR{cond} register,expr ADR伪指令格式 指令执行的条件码 加载的目标寄存器 地址表达式 地址表达式expr的取指范围: 当地址值不是字对齐时,其取指范围为-255~255; 当地址值是字对齐时,其取指范围为-1020~1020; 当地址值是16字节对齐时,其取指范围将更大。 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。 ... ADR R0,Delay ... Delay MOV R0,r14 ... 应用示例(源程序): 使用伪指令将程序标号Delay的地址存入R0 SMLAL{cond}{S} (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) 64位有符号乘加指令 SMLAL RdLo,RdHi,Rm,Rs SMULL{cond}{S} (RdLo,RdHi) ←Rm*Rs 64位有符号乘法指令 SMULL RdLo,RdHi,Rm,Rs UMLAL{cond}{S} (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) 64位无符号乘加指令 UMLAL RdLo,RdHi,Rm,Rs UMULL{cond}{S} (RdLo,RdHi) ←Rm*Rs 64位无符号乘法指令 UMULL RdLo,RdHi,Rm,Rs MLA{cond}{S} Rd←Rm*Rs+Rn (Rd≠Rm) 32位乘加指令 MLA Rd,Rm,Rs,Rn MUL{cond}{S} Rd←Rm*Rs (Rd≠Rm) 32位乘法指令 MUL Rd,Rm,Rs 条件码位置 操作 说明 助记符 乘法指令 64位无符号乘法指令——UMULL指令将Rm和Rs中的值作无符号数相乘,结果的低32位保存到RdLo中,而高32位保存到RdHi中。指令格式如下: UMULL{cond}{S} RdLo,RdHi,Rm,Rs 应用示例: UMULL R0,R1,R5,R8 ; (R1、R0)=R5×R8 SMLAL{cond}{S} (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) 64位有符号乘加指令 SMLAL RdLo,RdHi,Rm,Rs SMULL{cond}{S} (RdLo,RdHi) ←Rm*Rs 64位有符号乘法指令 SMULL RdLo,RdHi,Rm,Rs UMLAL{cond}{S} (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) 64位无符号乘加指令 UMLAL RdLo,RdHi,Rm,Rs UMULL{cond}{S} (RdLo,RdHi) ←Rm*Rs 64位无符号乘法指令 UMULL RdLo,RdHi,Rm,Rs MLA{cond}{S} Rd←Rm*Rs+Rn (Rd≠Rm) 32位乘加指令 MLA Rd,Rm,Rs,Rn MUL{cond}{S} Rd←Rm*Rs (Rd≠Rm) 32位乘法指令 MUL Rd,Rm,Rs 条件码位置 操作 说明 助记符 乘法指令 64位无符号乘加指令——UMLAL指令将Rm和Rs中的值作无符号数相乘,64位乘积与RdHi、RdLo相加,结果的低32位保存到RdLo中,而高32位保存到RdHi中。指令格式如下: UMLAL{cond}{S} RdLo,RdHi,Rm,Rs 应用示例: UMLAL R0,R1,R5,R8 ;(R1、R0)=R5×R8+(R1、R0) SMLAL{cond}{S} (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) 64

文档评论(0)

1亿VIP精品文档

相关文档