第8章 数据块传输(LDM_STM).ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据块传输(LDM,STM) 数据块传输指令用于加载(LDM)或者存储(STM)当前有效寄存器的任意子集。 它们支持所有可能的堆栈模式,维持空或者满的堆栈,此堆栈可以向上或者向下,在保存或者恢复内容,移动主存储器的大数据块是非常有效的。 汇编语法 LDM|STM{cond}FD|ED|FA|EA|IA|IB|DA|DB Rn{!},Rlist{^} {cond} 条件代码 Rn 计算有效寄存器序号的表达式 Rlist 寄存器列表,寄存器范围包含在{}(比如{R0,R2-R7,R10}) {!} 如果存在,表示请求回写(W=1),否则,W=0 {^}如果存在,置位S,加载CPSR和PC,在管理模式,强制传送用户bank地址模式命名 寄存器列表 此指令可以导致当前bank中的任意寄存器传输(非用户模式程序可以传送或者接收用户bank)。 在指令中,寄存器列表占用了16位,每一位对应了一个寄存器,如果位0为’1’,将导致R0被传输,为’0 ‘R0将不被传送,以此类推。 地址模式命名 对于每一个不同的地址模式有不同的汇编标识方法,依据指令是否用于支持堆栈或者其它用途。 不同的指令名称和相应的位的对应关系列于下表: 堆栈请求格式,FD,ED,FA,EA定义了前/后向索引和上/下位,F,E表示堆栈满或者空。A 和D 定义堆栈是递增还是递减,如果递增,STM将向上,LDM向下,如果递减,则相反。 当LDM/STM没有被用于堆栈,而只是简单地表示地址前向增加,后向增加,前向减少,后向减少时,由IA,IB,DA,DB控制。 寄存器的任意子集或者所有的寄存器都可以被指定,唯一的限制是寄存器列表不应该为空。 任何时候R15被存储到MEM中,存储的值是指令地址加12。 地址模式 传输地址是由Rn中的内容和前/后向索引位,上/下位决定的,寄存器的传输按照从低向高的顺序 如果寄存器列表中有R15,则R15在最后一个被传输。序号低的寄存器对应于存储器的低地址。 详解 STMFD SP!,{R0,R1,R2,R14} 满递减入栈,R13为基址地址 效果图: LDMFD SP!,{R0,R1,R2,R14} 满递减出栈,R13为基址地址 效果图: STMED SP!,{R0,R1,R2,R14} 空递减入栈,R13为基址地址 效果图: LDMED SP!,{R0,R1,R2,R14} 空递减出栈,R13为基址地址 效果图: STMFA SP!,{R0,R1,R2,R14} 满递增入栈,R13为基址地址 效果图: LDMFA SP!,{R0,R1,R2,R14} 满递增出栈,R13为基址地址 效果图: STMEA SP!,{R0,R1,R2,R14} 空递增入栈,R13为基址地址 效果图: LDMEA SP!,{R0,R1,R2,R14} 空递增出栈,R13为基址地址 效果图: STMIA R0!,{R1,R2, R3,R14} 先传后增,寄存器→RAM 效果图: LDMIA R0!,{R1,R2, R3,R14} 先传后增, RAM →寄存器 效果图: STMIB R0!,{R1,R2, R3,R14} 先增后传,寄存器→RAM 效果图: LDMIB R0!,{R1,R2, R3,R14} 先增后传, RAM →寄存器 效果图: STMDA R0!,{R1,R2, R3,R14} 先传后减, 寄存器→ RAM 效果图: LDMDA R0!,{R1,R2, R3,R14} 先传后减, RAM → 寄存器 效果图: STMDB R0!,{R1,R2, R3,R14} 先减后传,寄存器→ RAM 效果图: LDMDB R0!,{R1,R2, R3,R14} 先减后传, RAM → 寄存器 效果图: 举例 LDMFD SP!,{R0,R1,R2} ; 弹出三个寄存器 STMIA R0,{R0-R15} ; 保存所有的寄存器 LDMFD SP!,{R15} ; R15 - (SP),CPSR 不改变 LDMFD SP!,{R15}^ ; R15 - (SP), CPSR - SPSR_mode (优先级模式) STMFD R13,{R0-R14}^ ; 在堆栈中保存用户寄存器(优先级模式) 这些指令用于在子程序的入口保存状态,返回调用程序时恢复。 STMED SP!,{R0-R3,R14} ;保存R0 到R3,使应用程序可以访问;保存R14用于程序返回 BL somewhere ; 嵌套调用将覆盖R14 LDMED SP!,{R0-R3,R15} ; 恢复空间并返回 * * 最后[R13] 最后[R13] 最后[R13] 最后[R13] 最后[R13] 最后[R13] 最后[R13] 最后[R13] 最后[R0] 最后[R0] 最后[R0] 最后[R0]

文档评论(0)

0520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档