为啥50年前的怪异设计,依然用在现代手机电脑上?

作者: epcdiy分类: 计算机技术 发布时间: 2024-01-14 12:00:00 浏览:659359 次

为啥50年前的怪异设计,依然用在现代手机电脑上?

EUye9IM:
但是大小端一般是编译器的工作吧,用大端序对程序员来说其实也感知不强?

【回复】回复 @EUye9IM :目前高级语言程序员都无感知
【回复】感觉除了逆向了解这个真的没用,方便阅读这点也挺无厘头的,解决难阅读有无数种方法,你用CE一类的调试工具会自动算出一串16进制对应的基本类型的数值,但是大端带来的性能损耗难解决。
【回复】回复 @epcdiy : 开发嵌入式的 表示很熟悉
Raspberry-Kan:
龙芯早期使用的是MIPS,21年的时候他们自己整了个LoongArch吧(所以目前应该算LoongArch?

【回复】回复 @春云秋月_Harugumo :我听说是龙芯说自己不是mips,社区老外说你这样不诚实,我们不接纳。后来实在没办法就魔改了指令集,这下不仅规避了mips专利和授权问题,老外也没话说了。
【回复】回复 @树莓怪物_Official :LoongArch也是小端的
【回复】LoongArch算是超级魔改版MIPS
浪呀浪呀继续浪:
因为计算机底层只能做加法,减法也是通过加法实现的,小端值运算的时候地址第一位就是数值低位,算完直接地址+1,要是大端得用减法地址-1,效率低。另外小端还有强制类型转换的优点,大端有判断正负的优点。

【回复】更多是历史问题,小端加法器好做过去是优势没错,但现在存储器成本降低,一次加载32位并没有什么负担。大端优点除了判断正负,在网络设备上也能更快判断报文。
【回复】这还是历史遗留问题吧,现在都是一次读取32bit或者64bit到寄存器内,然后做运算 倒是我以前搞单片机时,8位机上要做超过255的计数,只能用两个字节,那就要考虑进位了
【回复】回复 @澹台兰菀 :跟存储没关系,小端的好处在于算术运算进位和不通长度数据类型转换无需移位(Intel总部展览厅有科普)。实际上大端的MIPS在算术运算的时候也是先移位再计算来解决进位问题的,MIPS学术研究网站有资料(美国大学的计算机专业有门课程就是自己实现MIPS的CPU),在ALU实现那章
新月q:
脑子接受到的图像也是反着的,经过大脑加工,你看到的就变正了。

【回复】应该说视网膜接收到的图像是反的吧,万一视网膜到大脑中间的神经就是反过来的,从而导致到达大脑的图像就是正的呢?
【回复】“脑子接收到的图像是反的”和色盲悖论等价,所有单透镜眼的生物都是这么看事物的,讨论“反正”没有意义。
【回复】回复 @薛定谔之鼠 :😄💧差不多得了,要是没矫正回来你会发现你两只眼睛看到的鼻子是分开在两边的😄💧
超时空小强:
我一个非计算机背景的,也是因为搞汉化才了解了这些的[doge]

【回复】也没啥好细说的,就是逆向工程呗,想做都可以去了解。
【回复】逆向破解,然后我见那些破解方法有的很是奇葩,有的甚至会直接去修改文件的16进制这种操作
【回复】回复 @超时空小强 :他们可能都觉得是黄油吧[脱单doge]
仇安池:
说到这个大小端,我印象里最大的一个槽点是,408的那个唐书计组教材,花了一页纸讲“内存排布”,其实就是大小端法,不知道为啥就不愿意引出这个名词。而且大小端法一句话就可以讲清楚的事,那本书花了一页纸,讲得还不明不白。

【回复】唐朔飞不就是一坨吗,现在谁还用那本[吃瓜]
【回复】回复 @得乌昂DUANG :。。。211非985。一般来说,“211”不会代指那些有985名号的大学吧[喜极而泣]
【回复】那本垃圾书,使劲给你讲数电的东西,就是不好好讲机组。我舍友考完试就把那个书撕了
不可爱AD:
看似小端反了,实际上没反,因为低位地址对应存储数据的低位

【回复】确实,向别人解释算法的时候储存的高位和数值的高位总是容易有歧义
【回复】是这样的,我最一开始接触的就是小端,并没有觉得反直觉,反而是大端反我的直觉
【回复】如果全转换为2进制,从左到右分别是1248位,但是十进制一般不会个十百千这样写,而是千百十个。确实反过来了。不过写文字并不会固定位数,首先阅读到最高位有助于快速理解数字有多大,之后才是更精确的数字。计算机固定位数,绝大多数时候数据不会那么贴近数字上限,就会首先阅读到一堆0,这就显著的降低了效率,不如把小位靠过来让加法计算更快。
2Maliao:
我这第一次接触大小端还是工厂有个正泰电表,然后工厂需要统计设备的用电量。巧了的是那个电表还正好带485通信,当时还以为捡漏了。然后modbus直接接组态读了半天数据都不对,然后我就用串口助手和16进制转hex一看,是顺序反了。然后再组态软件把浮点数顺序1234改成3412就好了

【回复】回复 @cute小杜 :有没有可能1234是16进制
【回复】这个不是大小端是swap吧?大小端是说一个个字节的顺序,modbus是16位的寄存器顺序反一反
【回复】回复 @羽毛球awa :是有可能的,但是我个人感觉用modbus浮点数读不对是byte swap的可能性更大
dadada_windows:
最后位图那个,问你自己一个问题,一幅图像,哪个像素是第一个像素?如果你选左上角,那么恭喜你,你和绝大多数人的直觉一样。如果你选左下角,那么恭喜你,你和数学家的直觉一样。位图的坐标系和数学家的直觉一样。答毕。

【回复】更正一下:刚刚又查了一下,位图的坐标系是和大多数人的直觉一样,从左上角开始的。我刚才记错了,特此更正。并向之前受到误导的同学道歉。
【回复】回复 @dadada_windows :我就说嘛[笑哭]我记得Windows窗体之类的坐标系都是从左上角算的
【回复】显示屏刷新画面是从左上角开始刷新的[藏狐]
作死取名中请勿打扰:
总觉得是美国人太蠢 以(*)代表指针指向的地址 小端序:(*) 78 56 34 12 大端序:(*) 12 34 56 78 事实上还缺两个序 小?序: 78 56 34 12 (*) 大?序: 12 34 56 78 (*) 可以看到,大?序继承了小端序的一切优点(比如取地址+1完全可以直接加) 这种意义下大?序是最优的一种顺序 同时,大?序的0地址无意义,完全可以被定义为NULL,而不带来任何歧义问题 (这带来的唯一的问题是,取最后几个字节的时候取不到,这与定义0地址为NULL的小端序是差不多一致的) 在这种意义下,图像的存储完全可以是正着写的

【回复】你脱离硬件物理实现的夸夸奇谈实在是让人忍俊不禁
【回复】笑点解析:总觉得是美国人太蠢
【回复】个人观点:这玩意不仅不方便改,而且很容易导致和其他硬件的兼容问题。大端序在支持的硬件上可以直接一次性通过内存地址把整个区域读进寄存器运算,小端序要读成大端序也只需要读一位进行一次位移操作即可,写也亦然,利用上没有问题。如果按照上面的替代方案走,不仅需要整体重做下面内存管理甚至内存本身的硬件和逻辑,在程序的编写上也很容易造成各种不便,因为处理器本身是设计为从低地址向高地址运行的,指针本身既可以是指向数据也可以是指向函数或者随便其他什么代码(某些意大利面程序连函数的概念都可以没有),所以真正应用恐怕还需要重新颠覆整个“内存地址”的观念,可行性并不高。
y5c4l3:
首先纠正一下,MIPS 架构是 bi-endianness 的,它的大端模式在之前生产的企业级路由器、防火墙中是特别常见的,比较典型的处理器就是 Cavium Networks 生产的 Octeon 系列. 另外,大端字节序也被叫做网络字节序,大端序中 MSB 总是先被发送出去,这样就为通讯带来了非常大的优势,例如我可以只看前 N 个比特或者字节,就能决定下一步的路由方向(早期的 ABC 类地址,就是基于这个划分的),又或者是预估缓冲区的大小量级.

【回复】确实错了,Mipsel是小端,被维基百科误导了[笑哭]
深夜中太阳的花苞:
我不知道阿拉伯表达数字是不是顺序和咱们反过来 1234会不会写成4321,如果那样,那他们看来大小端是一回事

【回复】不是一回事,1234小端是3412
【回复】回复 @epcdiy :34是一个字节,12是一个字节,在winhex里面就是两个16进制数为一个字节。 也就是说这个1234实际是两个字节,所以反过来就是3412
【回复】回复 @oCCFANo :计算机内存是以字节为单位,视频例子实际上是16进制两位数最大表示0-255,正好是一字节
骁飞丶:
(゚Д゚≡゚д゚)!?这期封面变了多少次啊,感觉每次打开b站都是不一样的封面

SlimeNull:
应该着重讲一下寻址上。低位地址表示低位字节,对于编程来讲这是符合直觉的。但是很多不接触编程的人认为大端序符合直觉… 这里说的直觉,其实是编程直觉和阅读直觉。就好像索引为什么大多从0开始一样,方便计算,但是不接触这个的人,就肯定认为从1开始比较合理。 讲一下大端序在获取低位字节需要进行什么计算,就能让人知道为什么小端序用的多了。 毕竟,谁也不希望,获取低位字节时,需要基地址+(数据长度-1)吧。

【回复】将地址视为从右到左递增就好了,即符合阅读习惯也符合小端
【回复】是的,学编程入门的时候应该都写过“高精度加法”,如果用数组模拟,并且数组中一个元素表示一位数,那么一般都是用数组的开头(下标为0)表示“个位”,这就是非常自然的小端。
浅草丶纳凉:
早期显示器是从下往上扫描的可能还有早期操作系统处理器架构只支持小端模式

【回复】不过如果是从只兼容小端模式来讲的话,早期使用诸如cat等方式读取文本文件时是否容易受影响?还是说如果显示器也是向上扫描的话可以弥补倒序读取带来的影响?
【回复】回复 @卡巴斯基安全软件 : 如果你考虑cat这种上古程序,你应当考虑的是打字机如何工作。因为它们原本是设计为以电传打字机为输入输入设备的。
TdS-pdV:
为什么要把数据倒过来?把计算机倒过来不就行了吗?

【回复】计算机那么笨重,我觉得还是人自己倒过来比较轻松
【回复】回复 @林桑DerPhantazie :出什么院,给我加大药量!
难得吃稀饭:
文字书写方式随着都是时代发展不断演化,没有哪种方式“更符合人类直觉”,难道古人用了几千年的自上而下、自右向左的方式不符合直觉吗,只是碍于时代和习惯罢了。况且现在还有广泛使用左行的文字,比如阿拉伯文。

【回复】横着阅读比竖着阅读快多了,这不是习惯的问题,是人眼本身就是横着长的。人机工程学就是研究这个的。
【回复】关键问题不是书写方向。而是为什么人读数字先读高位。如果人类常见语言里读数字都是先读低位,那么文字也会跟着语言一样设计,无论什么书写方向,都是先写低位再写高位。 感觉一门语言如果读数字先读低位,其实也正常。就好像英文写地址是从小到大那样,开口就能知道最细的一层信息,如果有上下文已经确定了高数量级的那几位,只说低位其实反而能减少废话(如计时)。不过也因此,说话时一开口就得先决定说的数字最低位精确到哪个数量级。
【回复】回复 @oCCFANo : 从右到左是因为方便左手压着竹简右手进行批改备注
HaiYan-GeGe:
我看没人回复了.... 如果是大端方式的话是就是按照顺序的,小端就是反着的。 在x86和amd64的CPU下,正常情况都是小端存储的,虽然在某些系统下也可以大端吧.... 为什么BMP照片反着,只是因为BMP是大端方式存储,但是现在已经几乎没人用大端了,基本都是小端了,所以反着。 我顺便再说下,其实那个winhex里面可以用数据解析器写进去,这样只需要写10进制就可以了,不需要转16[doge]

【回复】回复 @wpxw2163 :有人说电脑是小端,手机是大端。 但真实情况是不管是X86还是AMD64,还是ARM,这些处理器他们正常情况都是小端,现在的MacOS(以前的Mac有人说是大端,但是我现在也无法验证了,至少现在是小端),Windows,Android,iOS和绝大多数的Linux都是小端。
【回复】回复 @尤风入松 :那就不对了
【回复】难道不是因为当年电子枪的扫描方式?
nxcy2:
小端不反直觉啊,反而是大端反直觉才对

【回复】回复 @Henry阿傅先生 :你一定不写程序吧… 如果你写程序你就知道小短序是符合直觉的
【回复】回复 @Henry阿傅先生 :小端数字低位正好是地址低位,感觉挺适合的,单纯是因为习惯地址从左向右增大,如果竖着画内存,还是小端符合直觉
【回复】回复 @Henry阿傅先生 :直接人身攻击了,举报

CPU 网络 科普 苹果 合金弹头 电脑 大小端 little-endian big-endian 2023热门年度盘点

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!