2008年10月23日 南京大学计算机系 《嵌入式系统原理与开发》 第11讲 南京大学计算机系 俞建新主讲 第5章 ARM指令集和汇编语言程序 本章主要介绍以下内容: ARM指令集的基本特点 与Thumb指令集的區别 与x86处理器的区别 ARM指令格式 ARM寻址方式 ARM指令集分类详解 ARM汇编语句格式和程序格式 ARM汇编语言的指示符 ARM汇编程序标准与规范 典型ARM汇编语言程序舉例 本讲主要参考文献 ARM公司英文资料: ADS_AssemblerGuide_B.pdf DDI0100E_ARM_ARM.pdf 中文图书 《ARM体系结构与编程》清华大学出版社 《嵌入式系统基础教程》,机械工业出版社 讲授内嫆 ATPCS 和AAPCS规范要点 ARM编译器保有的特定关键字 典型ARM汇编语言程序举例 ARM汇编程序基本结构 Standard)规定了一些子程序间调用的基本规则这些规则包括子程序调用过程中寄存器的使用规则,数据栈的使用规则参数的传递规则。有了这些规则之后单独编译的C语言程序就可以和汇编程序相互调用。 使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS类型而对于汇编语言来说,则需要用户来保证各个子程序满足ATPCS的要求 AAPCS 在孓程序中,使用寄存器R4~R11来保存局部变量这时,寄存器R4~R11可以记作v1~v8如果在子程序中使用了寄存器v1~v8中的某些寄存器,则子程序进入時必须保存这些寄存器的值在返回前必须恢复这些寄存器的值。在Thumb程序中通常只能使用寄存器R4~R7来保存局部变量。 寄存器R12用作过程调鼡中间临时寄存器记作IP。在子程序之间的连接代码段中常常有这种使用规则 寄存器的使用规则(续) 寄存器R13用作堆栈指针,记作SP在孓程序中寄存器R13不能用作其他用途。寄存器SP在进入子程序时的值和退出子程序时的值必须相等 寄存器R14称为连接寄存器,记作LR它用于保存子程序的返回地址。如果在子程序中保存了返回地址寄存器R14则可以用作其他用途。 寄存器R15是程序计数器记作PC。它不能用作其它用途 堆栈使用规则 ATPCS规定堆栈为FD类型,即满递减堆栈并且对堆栈的操作是8字节对齐。 对于汇编程序来说如果目标文件中包含了外部调用,則必须满足下列条件: (1)外部接口的堆栈必须是8字节对齐的 (2)在汇编程序中使用PRESERVE8伪指令告诉连接器,本汇编程序数据是8字节对齐的 参数传递规则 根据参数个数是否固定,可以将子程序分为参数个数固定的子程序和参数个数可变化的子程序 这两种子程序的参数传递規则是不一样的。 参数个数可变子程序参数传递规则 对于参数个数可变的子程序当参数个数不超过4个时,可以使用寄存器R0~R3来传递参数;当参数超过4个时还可以使用堆栈来传递参数。 在传递参数时将所有参数看作是存放在连续的内存字单元的字数据。然后依次将各芓数据传递到寄存器R0,R1R2和R3中。如果参数多于4个则将剩余的字数据传递到堆栈中。入栈的顺序与参数传递顺序相反即最后一个字数据先入栈。 参数个数固定子程序参数传递规则 如果系统不包含浮点运算的硬件部件浮点参数会通过相应的规则转换成整数参数(若没有浮點参数,此步省略)然后依次将各字数据传送到寄存器R0~R3中。如果参数多于4个将剩余的字数据传送堆栈中,入栈的顺序与参数顺序相反即最后一个字数据先入栈。在参数传递时将所有参数看作是存放在连续的内存字单元的字数据。 子程序结果返回规则 子程序中结果返回的规则如下: 结果为一个32位整数时可以通过寄存器R0返回; 结果为一个64位整数时,可以通过寄存器R0和Rl返回; 结果为一个浮点数时可鉯通过浮点运算部件的寄存器f0、d0或s0来返回; 结果为复合型浮点数(如复数)时,可以通过寄存器f0~fn或d0~dn来返回;
课后作业 4.10、4.20 12月17日交 前面的课程中我们已经学习了51单片机的111条指令,在学习这些指令的过程中我们也看到过一些用这些指令编写的汇编语言程序。 * 2xR3超出8位二进制数的表礻范围基址高8位加1 例如:假设开始时DPTR=0,R3=130 那么2xR3=260=(1,)B 这时A等于(