PDP Endian和位移

时间:2016-07-23 00:27:14

标签: assembly bit-manipulation endianness

当你在PDP端进行一点转换时,这个操作比你在一个小端或大端系统上的位置需要更长的时间吗?

我之所以提出这个问题的原因是因为看起来像一个班次在各个方向都有点,计算机很难做到。

我无法通过任何方式对此进行测试,因为我无法访问PDP端机。 =(

3 个答案:

答案 0 :(得分:2)

PDP11的中端格式源于在16位机器上模拟32位操作的必要性。这是通过首先将高位字,然后低位字存储在存储器中来完成的,即使PDP11对其数据使用小端。这导致了奇怪的结束。虽然,实际上并没有真正的性能差异。将存储在存储器中的整数左移一个位置仍然在三个指令中完成:

mov #var+2,r0 ; load the address of the low word
asl (r0)      ; left shift low word
rol -(r0)     ; left shift high word with carry

如果var以小端存储,则代码类似:

move #var,r0   ; load address of the low word
asl (r0)+      ; left shift low word
rol (r0)       ; left shift high word

答案 1 :(得分:0)

  

中端或PDP-Endian系统保存最重要的单词   首先,每个字首先具有最低有效字节。对于   新软件的开发者,不仅完全合理,而且   强烈建议,忽略这种可能性。我不认为那里   曾经是一个处理器,它将32位整数值存储到a中的内存中   中端格式,虽然中端有时偶尔   出现在打包十进制格式,浮点等内容中   格式和模糊的通信协议(它用于   Visa的“Visa Base I”协议中的TCP / IP数据包长度。

我认为这是自己的答案。

当你说轮班你意味着有点转变?

以这种方式思考,如果处理器确实支持它,那么它可能有指令来执行这样的各种功能。有些处理器一次只能将一位移位到进位或旋转。因此无论如何,它们都与那些相同的速度无关。

与任何其他人一样。如果您正在查看它并以字节为单位进行操作,那么为了使其变得缓慢而痛苦,您只会让它变得缓慢而痛苦。但字节是无字节的,所以它无关紧要。

你正在处理文字(希望如此),其中一个结尾消失了。但是,即使每个其他单词都是一个不同的字节,并且你有能力读取任何一种类型(可能在多个处理器上),你仍然不在乎你仍然在用一个字来换位,这时的字节顺序也会消失

神话下的同一网页。

  PDP-11是“中端”。只有一点。 PDP-11没有   将32位值存储到内存的指令,所以特别奇怪   “中端”值不可能适用于它存储的方式   记忆中的价值观。它通常会将16位值存储到内存中   小端的方式。它可以做32位算术,存储   成对的16位CPU寄存器(不是存储器)中的值。最多   有意义的单词进入编号较低的寄存器,但在每个寄存器中   寄存器值存储为little-endian。这可以被视为   “中端”,但从某种意义上说,只能对装配起作用   语言程序员和编译器编写者,他们的代码永远不会希望   无论如何要便携。

答案 2 :(得分:0)

只有在存储单词然后单独查看字节时才能观察到字节顺序。

任何类型的机器上的寄存器中的数据总是表现为左边的MSB二进制(就像你将它写在像0b10110101这样的位值表示中)。左移总是乘以2的幂,右移总是除以2的幂,无论机器是大,小还是pdp-endian。

将endianness视为在执行大于一个字节的加载或存储时应用于CPU的加载存储单元。核心的寄存器和执行单元只能看到寄存器宽度的二进制整数。

可以编写"endian agnostic" code来将字符串序列化到字节流中,而不依赖于计算机的本机字节序。例如将额外的4个字节加入int

i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);