solomoon 发表于 2009-06-02 12:05

大端小端

经常看到有人贴C程序,测内存大小端的。
直接查看elf头部可以知道该程序的格式是大还是小。
那么,内存的大小端,跟elf可执行程序格式大小端之间有关系吗?

prolj 发表于 2009-06-02 12:10

http://topic.csdn.net/u/20090427/22/78cd5868-c866-4e9e-92c6-eab616d700f4.html

cjaizss 发表于 2009-06-02 13:13

大小端是机器决定的,有些机器同时支持大端和小端,可以选择.
elf文件的大小端对于elf本身来说是固定的,如果要在该机器上正确运行,首先得要和该机器的字节序一致(这应该是基本要求)

beepbug 发表于 2009-06-03 06:00

楼主把因果关系搞颠倒了。
endian取决于CPU,elf头部是去适配它。
有的CPU是little,有的CPU是big。
有的CPU可以用引脚电平来决定endian,或以某指令来切换。

solomoon 发表于 2009-06-04 10:30

了解了。最近在弄MIPS。
链接上说,不管是大小端,elfread都可以读出elf头,即elf结构有部分是大小端无关的。
那么对于bootload这第一个运行的程序来说,刚启动CPU应该没有初始化,那么bt如何运行?抑或cpu默认是处于大小端中的某一态势,这样bt就可以跑了?

beepbug 发表于 2009-06-09 20:20

endian指的是数据字节的存放次序。指令是一个字节一个字节读的,bootload和这没关系。

liying_gg 发表于 2009-06-09 20:52

回复 #5 solomoon 的帖子

bootloader也要分大端和小端。mips的5kc,4kc,都是有开关可以调大小端的。

mik 发表于 2009-06-09 21:46

原帖由 beepbug 于 2009-6-9 20:20 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
endian指的是数据字节的存放次序。指令是一个字节一个字节读的,bootload和这没关系。

怎么会没关系呢?

既然说到 endian,那么就要考虑 big-endian
在 powerpc 这些 big-endian 机器上指令是 4 bytes 的


即使在 x86 这些 little-endian 机器上指令也不完全是一个字节一个字节的读取的

cjaizss 发表于 2009-06-10 01:33

原帖由 beepbug 于 2009-6-9 20:20 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
endian指的是数据字节的存放次序。指令是一个字节一个字节读的,bootload和这没关系。
.......当然有关

beepbug 发表于 2009-06-10 07:54

原帖由 mik 于 2009-6-9 21:46 发表 http://linux.chinaunix.net/bbs/images/common/back.gif


怎么会没关系呢?

既然说到 endian,那么就要考虑 big-endian
在 powerpc 这些 big-endian 机器上指令是 4 bytes 的


即使在 x86 这些 little-endian 机器上指令也不完全是一个字节一个字节的读取的
1)是不是你把定长指令搅在一起了?指令字上的域的安排是另外一码事。日本搞的那个伪汇编(就是软考的那个,叫什么来着?CASP?),它是从bit0开始安排的。这个我想和endian好像不是一码事。
2)对。你们又要扯到Cache上去了。Cache一来,我就被打败了。Cache是块遮羞布,它把控制器给遮住了。它似乎改变了电脑的基本工作原理。X86里的控制器在读指令时,只能一字节一字节读,因为读了首字节,它才能知道这指令到底有几字节。
页: [1] 2
查看完整版本: 大端小端