第8章ARM汇编语言与嵌入式C混合编程
1.严格按照嵌入式C语言的编程规范,写一个C语言程序,实现将一个二维数组内的数据行和列进行排序。
答:略
2.嵌入式C程序设计中常用的移位操作有哪几种,请说明每种运算所对应的ARM指令实现。答:移位操作分为左移操作与右移操作
左移运算符―<
右移运算符―>>‖实现将―>>‖左边的操作数的各个二进制位向右移动―<
?对于空位的补齐方式,无符号数与有符号数是有区别的。
?对无符号数进行右移时,低位丢弃,高位用0补齐,其值相当于除以:2―右移位数‖次方
?对有符号数进行右移时,根据处理器的不同选择逻辑右移或算术右移
3.volatile限制符在程序中起到什么作用。请举例说明。
答:volatile的本意为―暂态的‖或.―易变的‖,该说明符起到抑制编译器优化的作用。
如果在声明时用―volatile‖关键进行修饰,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供特殊地址的稳定访问。
?例:硬件端口寄存器读取
?Char x=0,y=0,z=0;
?x=ReadChar(0x54000000);//读端口
?y=x;
?x=ReadChar(0x54000000);//再读端口
?z=x;
?以上代码可能被编译器优化为
?Char x=0,y=0,z=0;
?x=ReadChar(0x54000000);//读端口
?y=x;
?z=x;
?为了确保x的值从真实端口获取,声明时应该为
?V olatile char x;
?Char y,z;
4.请分析下列程序代码的执行结果。
#include
main(){
int value=0xFF1;
int *p1,**p2,***p3,****p4;
p1=&value;
p2=&p1;
p3=&p2;
p4=&p3;