- 1、本文档共57页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系统第三章arm指令系统
第三章 ARM指令系统 3.1 数据处理指令 3.2 数据传送指令 3.3 控制流指令 3.4 汇编语言程序 汇编语言的源语句行的一般格式是: {label} {instruction | directive|pseudo?instruction} {;comment} 注意: 即使没有标号,指令、伪指令和命令前面也必须有一个空白,例如一个空格或制表符。 源语句行的所有三部分都是可选的。可以使用空行来使代码更具可读性 大小写规则 指令记忆码、命令和符号寄存器名称可以用大写或小写编写,但不能混合使用大小写。 标号: 标号是表示地址的符号。在汇编时计算由标号指定的地址。汇编器计算标号的地址,该地址是相对于所定义标号所在段的原点的。引用相同段内的一个标号时,可以使用程序计数器加上或减去一个偏移量。这被称为相对程序的寻址。 其它段中的标号地址是在链接时计算的,此时链接程序已在存储器中为每个段分配了具体的位置。 注释: 一行中的第一个分号用于标记注释的开始,但不包括出现在一个字符串常数内的分号。行的末尾就是注释的结束。一个注释本身就是一个有效的行。汇编程序将忽略所有注释。 常数: 常数可以数值、布尔值、字符或字符串。 数字 可以接受下列形式的数字常数: 十进制数,如 123 十六进制数,如, 0x7B 布尔值 布尔常数 TRUE和 FALSE? 必须书写为 {TRUE} 和 {FALSE}。 字符 字符常数由左、右单引号组成,中间括住单个字符或一个转义字符,采用标准的 C 转义字符。 字符串 ? 字符串由左、右双引号括住多个字符或空格而组成。如果在一个字符串内使用了双引号或美元字符作为文字文本字符,则必须用一对适当的字符来表示它们。例如,如果需要在字符串内使用单个 $,则必须使用 $$。在字符串常数内可以使用标准的 C 转义序列。 ARM 汇编语言模块的示例 AREA ARMex, CODE, READONLY ; Name this block of code ARMex ENTRY ; Mark first instruction to execute start MOV r0, #10 ; Set up parameters MOV r1, #3 ADD r0, r0, r1 ; r0 = r0 + r1 stop MOV r0, #0x18 ; angel_SWIreason_ReportException LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SVC ?????#0x123456 ; ARM semihosting (formerly SWI) END ; Mark end of file 3.1 数据处理指令 ARM的数据处理指令使得程序员能够完成寄存器中数据的算术和逻辑操作。 其他指令只是传送数据和控制程序的顺序。 数据处理指令的典型特征是需要两个操作数,产生单个结果。 所有的操作数是32位,或来自寄存器、或是指令中定义的立即数。 如果有结果,则结果为32位宽并只能在寄存器中。 每一个操作数寄存器和结果寄存器都在指令中独立指定,也即ARM指令使用3地址模式。 ADD r0, r1, r2 ; r0 := r1 + r2 注意指令中操作数的顺序,r0是结果寄存器,然后是第一操作数(r1),最后是第二操作数(r2)。 当指令执行后,对系统状态而言唯一的变化是目的寄存器r0的值。 CPSR中的标志位(N、Z、C、V)也可有选择地变化。 1、算术操作 这类指令对两个32位操作数进行二进制算术操作。 ADD r0 , r1 , r2 ; r0 := r1 + r2 ADC r0 , r1 , r2 ; r0 := r1 + r2 + C SUB r0 , r1 , r2 ; r0 := r1 - r2 SBC r0 , r1 , r2 ; r0 := r1 - r2 + C - 1 2、逻辑操作 这类指令对输入操作数的对应位进行指定的布尔逻辑操作。 AND r0 , r1 , r2 ;r0 [i] := r1 [i] and r2 [i] ORR r0 , r1 , r2 ;r0 := r1 or r2 EOR r0 , r1 , r2 ;r0 := r1 xor r2 BIC r0 , r1 , r2 ;r0 := r1 and not r2 3、寄存器传送操作 这些指令无第一操作
文档评论(0)