计算机理论,大端和小端
Computer theory, big and little endian
目前正在学习计算机原理,汇编,卡在big-&little-endian
我检查了 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。
目前正在学习计算机原理,汇编,卡在big-&little-endian
我检查了 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。