ARM习题答案 联系客服

发布时间 : 星期一 文章ARM习题答案更新完毕开始阅读7765afd776a20029bd642dec

int xx=0;

然后在module_1的.h 文件中声明xx为外部变量 /*module_1.h*/ extern int xx;

接下来在module_2源文件中包括module_1的 .h 文件 /*module_2.c*/

#include \

在module_3源文件中包括module_1的 .h 文件 /*module_3.c*/

#include \

这样在module_2, module_3中就可以使用module_1中提供的int型变量xx了。

9.ATPCS 与 AAPCS的全称是是什么,它们有什么差别?掌握子程序调用过程中寄存器的使用规则,数据栈的使用规则及参数的传递规则,在具体的函数中能够熟练应用。

答:过程调用标准ATPCS(ARM-Thumb Produce Call Standard)规定了子程序间相互调用的基本规则, ATPCS规定子程序调用过程中寄存器的使用规则、数据栈的使用规则及参数的传递规则。

2007年,ARM公司推出了新的过程调用标准AAPCS(ARM Architecture Produce Call Standard),它只是改进了原有的ATPCS的二进制代码的兼容性。

10.内嵌式汇编有哪些局限性?编写一段代码采用C语言嵌入式汇编程序,在汇编程序中实现字符串的拷贝操作。 答:内嵌汇编的局限性

(1)操作数

? ARM开发工具编译环境下内嵌汇编语言,指令操作数可以是寄存器、常量或C语

言表达式。可以是char、short或int类型,而且是作为无符号数进行操作。 ? 当表达式过于复杂时需要使用较多的物理寄存器,有可能产生冲突。

? GNU ARM编译环境下内嵌汇编语言ARM开发工具稍有差别,不能直接引用C语

言中的变量。 (2)物理寄存器

不要直接向程序计数器PC赋值,程序的跳转只能通过B或BL指令实现。

一般将寄存器R0~R3、R12及R14用于子程序调用存放中间结果,因此在内嵌汇编指令中,一般不要将这些寄存器同时指定为指令中的物理寄存器。

在内嵌的汇编指令中使用物理寄存器时,如果有C语言变量使用了该物理寄存器,则编译器将在合适的时候保存并恢复该变量的值。需要注意的是,当寄存器SP、SL、FP以及SB用作特定的用途时,编译器不能恢复这些寄存器的值。

通常在内嵌汇编指令中不要指定物理寄存器,因为有可能会影响编译器分配寄存器,进而可能影响代码的效率。 (3)标号、常量及指令展开

? C语言程序中的标号可以被内嵌的汇编指令所使用。但是只有B指令可以使用C语

言程序中的标号,BL指令不能使用C语言程序中的标号。 (4)内存单元的分配

? 内嵌汇编器不支持汇编语言中用于内存分配的伪操作。所用的内存单元的分配都是

通过C语言程序完成的,分配的内存单元通过变量以供内嵌的汇编器使用。

? (5)SWI和BL指令

? SWI和BL指令用于内嵌汇编时,除了正常的操作数域外,还必须增加如下3个可

选的寄存器列表:

? 用于存放输入的参数的寄存器列表。 ? 用于存放返回结果的寄存器列表。

? 用于保存被调用的子程序工作寄存器的寄存器列表。