2016-07-23 43 views
-1

當您在PDP endian中進行位移時,與小型或大型endian系統上的位置相比,此操作所用的時間要長一些嗎?PDP Endian和位移

我問這個問題的原因是因爲它看起來像是在一個班上四處奔波,對於一臺計算機來說很難做到。

任何方式我沒有辦法測試這個,因爲我沒有訪問PDP endian機器。 =(

+3

如果你在談論PDP11是16位機器,具有16位寄存器。 AFAIR,PDP11-endianness是指32位'long'在內存中的佈局方式,這與通常在寄存器中完成的移位無關。 PDP11上的32位移位可能看起來很像32位機器上的64位移位或64位機器上的128位移位。 – EOF

+0

@dwelch我沒有做任何事......這只是出於好奇。 – DarthRubik

+0

任何按位操作都可以在值上運行,而不是表示 –

回答

0

中端還是PDP-Endian的系統保存最顯著字 首先,與第一具有最小顯著字節內的每個字。對於 開發的新軟件,它不僅是完全合理的,但 強烈建議,忽略這種可能性我認爲有沒有 有史以來是一個處理器存儲32位整數值的內存在 中間碼格式,雖然中間碼有時 出現在像打包十進制格式,浮點數 格式,以及模糊的通信協議(它用於在V中的TCP/IP數據包的長度爲 伊薩的「簽證基地I」協議)。

我認爲這個答案本身。

當你說轉移你的意思是有點轉變?

想想看,如果一個處理器確實支持它,那麼它可能有指令去做類似的功能。無論如何,一些處理器一次只將一位移出進位位或旋轉。因此,無論如何,這些速度都是無關緊要的。

同樣與其他任何。如果你正在查看它並以字節爲單位進行操作,你只是爲了讓它變得緩慢而痛苦而讓它變得緩慢而痛苦。但字節是無邊的,所以它沒有關係。

你正在處理的話(希望),並且其中一個endiannesses消失。但即使每一個單詞都是不同的字節序,並且你有能力閱讀任何一種(可能在多個處理器上),但你仍然不在意你仍然在一個字中移動位,字節序也會消失。

神話下的同一個網頁。

PDP-11的是「中端」。只有一點。 PDP-11沒有 指令將32位值存儲到存儲器,所以特別奇怪的「中端」值不可能適用於其在存儲器中存儲 值的方式。它以通常的小尾數方式將16位值存儲到內存中。它可以執行32位算術運算,將 值存儲在成對的16位CPU寄存器(而非存儲器)中。最重要的 重要的字進入了較低編號的寄存器,但在每個 寄存器值被存儲爲小端。所以這可以看作是 「middle-endian」,但從某種意義上說,這隻能對彙編語言程序員和編譯器編寫者很重要,他們的代碼永遠不可能希望 是可移植的。

0

當您存儲一個字,然後單獨查看字節時,只能觀察字節碼。

在任何類型的機器上的寄存器中的數據總是表現爲與左邊的MSB一樣的二進制(就像你在像0b10110101這樣的位值表示中寫入它)。左移總是乘以2的冪,而右移總是除以2的冪,而不管機器是大的,小的還是pdp-endian。

當執行加載或存儲寬度超過一個字節時,可以考慮在CPU的加載存儲單元中應用字節序。核心的寄存器和執行單元部分只看到寄存器寬度的二進制整數。


它可以編寫"endian agnostic" code序列化整數/從字節流,而不在機器的本地字節序的任何相關性。例如到額外的4個字節爲int

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

的PDP11的中間endian格式出來的必要性以模擬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 
+0

我認爲操作系統想象的是在一次操作中轉換PDP-endian 32位字,並且硬件要做到這一點比如果這些位可能只是更復雜從右到左(這就是爲什麼我把我的答案集中在那部分)。 Upvoted指出PDP-11是一個16位機器和實際的代碼序列。 –