完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一. ARM指令长度及数据类型
ARM微处理器的指令长度可以是32位(ARM状态下), 也可以是16位(在Thumb状态下) ARM微处理器中支持字节(8位),半字(16位),字(32位)三种数据类型,字需要4字节对齐(地址低两位为0),半字需要2字节对齐(地址的最低位为0) 程序的启动都是从ARM指令集开始, 所有的ARM指令集都可以是有条件执行的. 二. ARM汇编指令格式 {cond}: 指令执行的条件编码, 如EQ,NE {S}: 决定指令的执行是否影响CPRS的值 ARM指令语法格式中,<>中的内容是必需的, 而{}中的内容是可选的 三. ARM指令的条件码域 大多ARM指令都可以条件执行, 也就是根据CPSR中条件码的状态决定是否执行该指令 只有在CPSR的条件码标志满足指定的条件时,带条件码的指令才可以执行,否则被忽略(相当于一条空操作NOP指令) 每一条ARM指令编码中包含4位的条件码.位于指令编码的最高4位[31:28] 四. ARM指令的条件码域 五. ARM寻址方式 立即寻址: 操作数本身就是指令中给出. 例如: ADD R0,R0,#1 R0<-R0+1 ADD RO,R0,#0x3f R0<-R0+0x3f 寄存器间接寻址: 以寄存器中的值作为操作数的地址, 而操作数存放在存储器中. 例如: ADD R0,R1,[R2] R0<-R1+[R2] LDR R0, [R1] R0<-[R1] STR R0,[R1] [R1]<-R0 基址变址寻址: 将寄存器的内容与指令中给出的地址偏移量相加, 从而得到一个操作数的有效地址 例如: LDR R0, [R1,#4] R0<-[R1+4] LDR R0,[R1,#4] R0<-[R1+4],R1<-R1+4 LDR R0,[R1],#4 R0<-[R1],R1<-R1+4 多寄存器寻址: 一条指令可以完成多个寄存器值得传送. 例如: LDMIA R0,{R1,R2,R3,R4} R1<-[R0],R2<-[R0+4],R3<-[R0+8], R4<-[R0+12] 相对地址:基地址为程序计数器PC的当前值,偏移量为目的地址和现行地址之间差的基址变址寻址,将PC的值与偏移量相加之后的得到的操作数的有效地址. 例如: BL NEXT ... NEXT ... MOV PC,LR 7. 堆栈寻址: 递增堆栈: 向高地址方向生长 递减堆栈: 向低地址方向生长 满堆栈: 指针指向最后压入堆栈的有效数据项. 空堆栈: 指针指向下一个要放入数据的空位置. 例如: STMFD R13!,{R0,R4-R12,LR} 将寄存器列表中的寄存器(R0,R4~R12,LR)内容压入堆栈 LDMFD R13!,{R0,R4-R12,PC} 将堆栈内容恢复到寄存器中(R0,R4~R12,PC)中. |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
787 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程介绍之烧写所需镜像
888 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写方法
608 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
905 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核源代码的目录结构和文件说明
821 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:34 , Processed in 0.670055 second(s), Total 68, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号