第4章--ARM程序设计2014年3月17日.pptVIP

  • 77
  • 0
  • 约1.47万字
  • 约 96页
  • 2018-12-19 发布于北京
  • 举报
第4章--ARM程序设计2014年3月17日.ppt

共96页 * AREA strcopy,CODE, READONLY EXPORT strcopy strcopy LDRB R2,[R1],#1 STRB R2,[R0],#1 CMP R2,#0 BNE strcopy MOV PC, LR END 3、把下面的汇编函数改写成C函数。 作 业(续) 共96页 * 如果函数的参数多于 4 个,那么 多余 的参数则按 自右向左的顺序压入数据堆栈,即参数入栈顺序与参数顺序相反。 2、ATPCS关于堆栈和寄存器的使用规则(续) 共96页 * 函数参数使用寄存器和数据栈的示意图如下: 共96页 * 下表列举了ARM-Thumb过程调用标准规定的寄存器的名称和使用方法。 寄存器 别名1 别名2 用法 R0~R3 A1~A4 参数寄存器,其中R0又被用作函数返回值寄存器 R4~R8 V1~V5 函数局部变量寄存器 R9 V6 Sb 在RWPI情况下保存静态基地址 R10 V7 Sl 用来保存堆栈边界地址 R11 V8 fp 保存结构指针 R12 Ip 过度寄存器 R13 Sp 堆栈指针 R14 LR 连接寄存器 R15 PC 程序计数器 RWPI读写位置无关(编译器选项)。 共96页 * 寄存器的别名和特殊名称都是 ARM编译器和汇编器预定义的,用户可以直接使用。 4.4.2 C程序可调用汇编函数实例 下面是一个用汇编语言编写的函数,该函数把 R1 指向的数据块复制到 R0 指向的存储块。 2、ATPCS关于堆栈和寄存器的使用规则(续) 共96页 * AREA tt, CODE, READONLY EXPORT strcopy strcopy LDRB R2,[R1],#1 STRB R2,[R0],#1 CMP R2,#0 BNE strcopy MOV PC,LR END 4.4.2 C程序可调用汇编函数实例(续) 共96页 * 根据 ATPCS 的 C 语言程序调用汇编函数,参数 由左向右 依次传递给寄存器R0~R3 的规则,可知汇编函数 strcopy 在 C 程序中原型应该为: void strcopy(char *d,const char* s); 4.4.2 C程序可调用汇编函数实例(续) 共96页 * extern void strcopy(char *d,const char * s); int main(void) { const char *src = “source”; char dest[10]; ……. strcopy(dest, src); ………. } 在 C 语言文件中,调用 strcopy 函数的方法如下: 共96页 * 1、常量指针 表示指针所指向的地址的内容是不可修改的,但指针自身可变。 const 类型* 指针名 extern void strcopy(char *d,const char * s); int main(void) { const char* src =source; char dest[10]=123456; src=dest; } 4.4.2 C程序可调用汇编函数实例(续) 共96页 * 2、指针常量 表示指针自身不可变,但其指向的地址的内容是可以修改的。 类型* const 指针名 extern void strcopy(char *d,const char * s); int main(void) { char* const src =source; char dest[10]=123456; strcopy(src,dest); } 共96页 * 4.4.3 汇编程序调用C函数实例 现有 C 函数 g() 如下: int g(int a, int b, int c, int d, int e)

文档评论(0)

1亿VIP精品文档

相关文档