zoukankan      html  css  js  c++  java
  • 存储器格式是个大问题----ARM体系的存储系统

          ARM处理器采用冯诺依曼结构,即指令和数据共用一条32位的数据总线,只有装载、保存和交换指令可以访问存储器中的数据。

       ARM处理器将存储器看作是一个从0开始的线性连续递增的字节集合。eg. 字节0-3保存第一个存储的字,字节4-7保存第二个存储的字,依次类推。

       地址空间:ARM结构使用232个8位字节地址空间,字节地址的排列从0~232-1.

       存储器格式:

       1)小端格式存储系统:记忆口诀 “小对小,高高低低”

       在小端格式存储系统中,一个字当中最低地址的字节被看作是最低位字节,最高地址的字节被看作是最高位字节。因此在存储系统中字节0连接到数据线7~0.

           2)大端格式存储系统:记忆口诀  “大对小,高低高低”,该格式符合人类的正常思维。

        在大端格式中,ARM处理器将最高位的字节保存在最低地址,最低位字节保存在最高地址上。此在存储系统中字节0连接到数据线31~24.

    举例说明:

    如果将一个32位的整数0x12345678存放到一个整形变量(int 型)中,其中OP0表示一个32位数据的最高字节MSB,OP3表示一个32位数据的最低字节LSB,如下表所示:

    地址偏移 大端格式 小端格式
    0x00 12(op0) 78(op3)
    0x01 34(op1) 56(op2)
    0x02 56(op2) 34(op1)
    0x03 78(op3) 12(op0)

     如何编程测试自己所使用系统的存储格式?

    1.采用指针的方法:代码如下

     1 #incldue <stdio.h>
     2 
     3 int main (void)
     4 {
     5     int i = 1;
     6     char *ptr = (char *)&i;
     7    
     8     if (1 == *ptr)
     9    {
    10         printf("This system is little-endian
    ");
    11    }
    12     else
    13         printf("This system is big-endian
    ");
    14 
    15     return 0;   
    16 }

    2.采用共用体的方法:代码如下

     1 int checksystem (void)
     2 {
     3     union check
     4     {
     5          int i;
     6          char   ch;
     7     }c;
     8    
     9     c.i = 1;
    10     
    11     return (c.ch == 1);
    12 }

    如果返回1----则是小端模式;如果返回0----则是大端模式;

  • 相关阅读:
    ps背景橡皮擦工具详解
    Application called By IE on Pseudo B/S Mode
    一种B/S模式下基于JAVA反射机制的可伸缩动态加载模块的解决方案
    Compile the latest Kernel(linux3.1rc4) On Ubuntu Plateform
    HttpService & WebService For Flex Develop
    国外的一个flex入门教学~[转]
    HQL略解
    How to build a Flex development platform based on Myeclipse8.6 & Flex4
    基于Pipe的PureMVC Flex框架的多核共享消息技术
    Ninject IOC<一>
  • 原文地址:https://www.cnblogs.com/philospy/p/3996401.html
Copyright © 2011-2022 走看看