linux - 计算机理论,大端和小端

标签 linux assembly cpu-architecture

目前,我正在学习计算机理论、汇编,而且我被困在大端和小端。

我检查了 EIP 寄存器(在 Linux 中使用命令 x/8xw),它的值是 0x00fc45c7(一个字,4 个字节)。当我请求字节而不是单词 (x/8xb) 时,我得到一个相反的序列(因为它是小端机器):c7 45 fc 00。当我请求半字 (x/8xh) 时,我得到这个序列:45c7和 00fc。这些都是平等的,我想自己检查一下。

当将第一个十六进制值(0x00fc45c7)转换为十进制值时,我得到 16532935(算法如下:16^7*0 + 16^6*0 + 16^5*15 + 16^4*12 + 16^3*4 + 16^2*5 + 16^1*12 + 16^0*7)。这是一个简单的从十六进制到十进制的转换,我明白了。

我正在看的书上有一个计算的例子,证明0x00fc45c7等同于c7 45 fc 00,计算如下: 0*(256^3) + 252*(256^2) + 69*(256^1) + 199*(256^0)。

我明白,0、252、69 和 199 是值,我们将每个字节转换为十进制后得到 fc = 15*16^1 + 12*16^0 = 252、45 = 69 和 c7 = 199。我不明白的是256代表什么,我们为什么要把256提升到power?这些计算的算法是什么?如果我们不使用字节(c7 45 fc 00)而是使用半字(45c7 和 00fc)来获得与 0x00fc45c7 相同的值,它们会是什么?我已经通过互联网冲浪,但仍然没有找到任何答案。所有的文章都只是解释小端系统和大端系统之间的区别,但解释并没有深入到这个问题。非常感谢您的帮助。

最佳答案

您使用 256 是因为您可以将两个十六进制数字视为以 256 为基数的单个数字。因此,您可以假设在处理每个字节时都以 256 为基数。

关于linux - 计算机理论,大端和小端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38918729/

相关文章:

android - 两个 native 库具有不同的 cpu 架构集

java - 获取所有 JVM 使用的所有 Java 类的列表?

c++ - 为什么具有顺序一致性的std::atomic存储区使用XCHG?

cpu-architecture - 实现逻辑门的直觉

assembly - 为什么x86-64的jmpq只需要32位长度地址?

c - 在不是地址/指针的值上使用LEA吗?

go - Go语言CPU依赖吗?

android - 与内存支持文件相反?

c - 在 Linux 中读取和写入相同文件描述符的问题

python - Linux编译opencv python报错: ImportError: libjasper. so.1