﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-永远的cpp-文章分类-assembly</title><link>http://www.cppblog.com/VinsonEx/category/10748.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 02 Apr 2011 19:03:16 GMT</lastBuildDate><pubDate>Sat, 02 Apr 2011 19:03:16 GMT</pubDate><ttl>60</ttl><item><title>深入浅出大端和小端(转载)</title><link>http://www.cppblog.com/VinsonEx/articles/86602.html</link><dc:creator>VinsonEx</dc:creator><author>VinsonEx</author><pubDate>Tue, 02 Jun 2009 15:24:00 GMT</pubDate><guid>http://www.cppblog.com/VinsonEx/articles/86602.html</guid><wfw:comment>http://www.cppblog.com/VinsonEx/comments/86602.html</wfw:comment><comments>http://www.cppblog.com/VinsonEx/articles/86602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/VinsonEx/comments/commentRss/86602.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/VinsonEx/services/trackbacks/86602.html</trackback:ping><description><![CDATA[
<p><font size="2"><br>端模式（Endian）的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类，从圆头开始将鸡蛋敲开的人被归为Big Endian，从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头（Big-Endian）敲开还是从小头（Little-Endian）敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界，Endian表示数据在存储器中的存放顺序。下文举例说明在计算机中大小端模式的区别。</font></p>
<p><font size="2">如果将一个32位的整数0x12345678存放到一个整型变量（int）中，这个整型变量采用大端或者小端模式在内存中的存储由下表所示。为简单起见，<span>本书使用OP0表示一个32位数据的最高字节<span style="COLOR: #ff0000">MSB</span>（Most Significant Byte），使用OP3表示一个32位数据最低字节<span style="COLOR: #ff0000">LSB</span>（Least Significant Byte）。</span></font></p>
<p><font size="2"></font></p>
<p>
<table cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">地址偏移</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">大端模式</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">小端模式</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x00</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">12（OP0）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">78（OP3）</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x01</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">34（OP1）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">56（OP2）</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x02</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">56（OP2）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">34（OP1）</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x03</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">78（OP3）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">12（OP0）</font></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><font size="2"></font></p>
<p><font size="2">如果将一个16位的整数0x1234存放到一个短整型变量（short）中。这个短整型变量在内存中的存储在大小端模式由下表所示。</font></p>
<p><font size="2"></font></p>
<p>
<table cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">地址偏移</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">大端模式</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">小端模式</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x00</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">12（OP0）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">34（OP1）</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x01</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">34（OP1）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">12（OP0）</font></p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><font size="2"></font></p>
<p><font size="2">由上表所知，采用大小模式对数据进行存放的主要区别在于在存放的字节顺序，<span style="COLOR: red">大端方式将高位存放在低地址，小端方式将高位存放在高地址</span>。采用大端方式进行数据存放符合人类的正常思维，而采用小端方式进行数据存放利于计算机处理。到目前为止，采用大端或者小端进行数据存放，其孰优孰劣也没有定论。</font></p>
<p><font size="2">有的处理器系统采用了小端方式进行数据存放，如Intel的奔腾。有的处理器系统采用了大端方式进行数据存放，如IBM半导体和Freescale的PowerPC处理器。不仅对于处理器，一些外设的设计中也存在着使用大端或者小端进行数据存放的选择。</font></p>
<p><font size="2">因此在一个处理器系统中，有可能存在大端和小端模式同时存在的现象。这一现象为系统的软硬件设计带来了不小的麻烦，这要求系统设计工程师，必须深入理解大端和小端模式的差别。大端与小端模式的差别体现在一个处理器的寄存器，指令集，系统总线等各个层次中。</font></p><img src ="http://www.cppblog.com/VinsonEx/aggbug/86602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/VinsonEx/" target="_blank">VinsonEx</a> 2009-06-02 23:24 <a href="http://www.cppblog.com/VinsonEx/articles/86602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>决定开始学汇编了</title><link>http://www.cppblog.com/VinsonEx/articles/86325.html</link><dc:creator>VinsonEx</dc:creator><author>VinsonEx</author><pubDate>Sun, 31 May 2009 14:41:00 GMT</pubDate><guid>http://www.cppblog.com/VinsonEx/articles/86325.html</guid><wfw:comment>http://www.cppblog.com/VinsonEx/comments/86325.html</wfw:comment><comments>http://www.cppblog.com/VinsonEx/articles/86325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/VinsonEx/comments/commentRss/86325.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/VinsonEx/services/trackbacks/86325.html</trackback:ping><description><![CDATA[<br>汇编对我来说，已经有点遥远了，在学校所学的那么一点已经全部还给老师了<br>就让我从零开始吧&#8230;&#8230;
<img src ="http://www.cppblog.com/VinsonEx/aggbug/86325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/VinsonEx/" target="_blank">VinsonEx</a> 2009-05-31 22:41 <a href="http://www.cppblog.com/VinsonEx/articles/86325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>