阅读以下关于嵌入式C语言编程方面的问题,回答问题1至问题3,将答案填入对应栏内。 [说明] 嵌入式C语言编程中常涉及位运算、宏定义的问题,以及大端方式(Big-endian)、小端方式(Little-endian)的访问问题。 某嵌入式处理器工作在

admin2012-01-21  45

问题   阅读以下关于嵌入式C语言编程方面的问题,回答问题1至问题3,将答案填入对应栏内。
[说明]
   嵌入式C语言编程中常涉及位运算、宏定义的问题,以及大端方式(Big-endian)、小端方式(Little-endian)的访问问题。
某嵌入式处理器工作在大端方式(Big-endian)下,其中unsigned int为32位,unsigned short为16位,unsigned char为8位。仔细阅读并分析下面的C语言代码,写出其打印输出的结果,将答案填入对应栏内。
   #include  "stdio.h"
   #include  "stdlib.h"
   void *MEM_ADDR;
   void mem_test(void)
   {
   unsigned int *pint_addr=NULL;
   unsigned short *pshort_addr=NULL;
   unsigned char *pchar_addr=NULL;
   MEM_ADDR=(void *)malloc(sizeof(int));
   pint_addr=(unsigned int *)MEM_ADDR;
   pshort_addr=(unsigned short *)MEM_ADDR;
   pchar_addr=(unsigned char *)MEM_ADDR;
   *pint_addr=0x12345678;
   printf("0x%x, 0x%x\n", *pshort_addr, *pchar_addr);
   /*第一次输出*/
   pshort_addr++;
   *pshort_addr=0x5555;
   printf("0x%x, 0x%x\n", *pint_addr, *pchar_addr);
   /*第二次输出*/
   pchar_addr++;
   *pchar_addr=0xAA;
   printf("0x%x, 0x%x\n", *pint_addr, *pshort_addr);
   /*第三次输出*/
   }

选项

答案第一次输出:0x1234,0x12 第二次输出:0x12345555,0x12 第三次输出:0x12aa5555,0x5555

解析 在计算机中,数据是以字节为单位进行存储的。以整型数据0x12345678为例,在小端模式计算机中(x86),该数据分成4个字节依次存储在连续的4个字节的地址空间中,从低到高依次为0x78、0x56、0x34、0x12;而在大端模式系统中(PPC通常设置为大端模式),该数据从低地址空间到高地址空间的存储顺序为0x12、0x34、0x56、0x78,根据这种存储方式,可以得出题目中的多种内存访问方式的访问位置及内容。
转载请注明原文地址:https://jikaoti.com/ti/WOI7FFFM
0

最新回复(0)