2016-07-23 31 views
-1

Wenn Sie eine Bitverschiebung in PDP Endian machen dauert diese Operation etwas länger als wenn Sie auf einem kleinen oder großen Endian-System wären?PDP Endian und Bitverschiebungen

Der Grund, warum ich diese Frage stelle, ist, weil es so aussieht, als würden Bits in alle Richtungen auf einer Schicht gehen, wäre für einen Computer schwer zu tun.

Irgendwie habe ich keine Möglichkeit, dies zu testen, weil ich keinen Zugriff auf eine PDP-Endian-Maschine habe. = (

+3

Wenn Sie sprechen die PDP11, das ist eine 16-Bit-Maschine mit 16-Bit-Registern. AFAIR, PDP11-Endianness bezieht sich auf die Art und Weise, wie 32-Bit-Langperioden im Speicher angeordnet sind, was für die Verschiebung, die normalerweise in Registern erfolgt, nicht besonders relevant ist. Eine 32-Bit-Verschiebung auf einem PDP11 wird wahrscheinlich einer 64-Bit-Verschiebung auf einer 32-Bit-Maschine oder einer 128-Bit-Verschiebung auf einer 64-Bit-Maschine sehr ähnlich sein. – EOF

+0

@dwelch Ich mache nichts .... das ist nur aus Neugierde. – DarthRubik

+0

Alle bitweisen Operationen arbeiten an Werten, nicht an Repräsentation –

Antwort

0

Middle-Endian oder PDP-Endian-Systeme speichern Sie das höchstwertige Wort erste, mit jedem Wort zuerst das niedrigstwertige Byte hat. Für Entwickler von neuer Software ist es nicht nur durchaus sinnvoll ist, aber Ich glaube nicht, dass jemals ein Prozessor war, der 32-Bit-Ganzzahl-Werte in einem Middle-Endian-Format speicherte, obwohl Mittelendianess gelegentlich in Sachen wie gepackt-Dezimal erschien Formate, Fließkomma Formate und obskure Kommunikationsprotokolle (es wird für die Länge der TCP/IP-Pakete in V verwendet isa's "Visa Base I" -Protokoll.

Ich denke, das antwortet sich.

Und wenn Sie shift sagen, meinen Sie ein bisschen shift?

Denken Sie es so, wenn ein Prozessor das unterstützt, dann hat es wahrscheinlich Anweisungen, verschiedene Funktionen wie diese zu tun. Einige Prozessoren verschieben nur jeweils ein Bit auf einmal in das Übertragsbit oder rotieren umher. Also wäre es egal, egal welche Geschwindigkeit.

Ebenso mit anderen. Wenn Sie es als Byte betrachten und darauf arbeiten, machen Sie es langsam und schmerzhaft, um es langsam und schmerzhaft zu machen. Aber Bytes sind endianlos, also spielt es keine Rolle.

Sie haben es mit Wörtern zu tun (hoffentlich) und eine der Endianheiten verschwindet. Aber selbst wenn jedes andere Wort ein anderer Endian ist und du die Fähigkeit hast, jede Art zu lesen (möglich auf einer Reihe von Prozessoren), ist es dir egal, dass du immer noch Bits in einem Wort umschickst, die Endianz verschwindet auch an diesem Punkt .

Gleiche Webseite unter Mythen.

PDP-11 waren "Mittelendian". Nur irgendwie. Der PDP-11 hatte keine Anweisungen zum Speichern von 32-Bit-Werten im Speicher, so dass der spezielle seltsame "Middle-Endian" -Wert möglicherweise nicht auf die Art und Weise anwendbar war, wie er Werte im Speicher speicherte. Es speichert 16-Bit-Werte im üblichen Little-Endian-Modus in der üblichen . Es könnte 32-Bit-aritmatisch arbeiten und die Werte in Paaren von 16-Bit-CPU-Registern speichern (kein Speicher). Das am meisten signfikante Wort ging in das Register mit der niedrigeren Nummer, aber in jedem Register wurden die Werte little-endian gespeichert. So könnte das als "Middle-Endian" angesehen werden, aber in einem Sinne könnte das nur Assembly Sprache Programmierer und Compiler-Autoren, deren Code könnte nie hoffen, sowieso beweglich sein.

0

Endianness ist nur beobachtbar, wenn Sie ein Wort speichern und dann die Bytes separat betrachten.

Daten in Registern auf jeder Art von Maschine verhält sich immer als binär mit dem MSB auf der linken Seite (wie Sie es in einer Ortswertdarstellung wie 0b10110101 schreiben würden). Eine Linksverschiebung multipliziert immer mit einer Potenz von Zwei, und eine Rechtsverschiebung wird immer durch eine Potenz von Zwei geteilt, unabhängig davon, ob die Maschine groß, klein oder pdp-endian ist.

Denken Sie an Endianness, die in der Lade-Speicher-Einheit der CPU angewendet wird, wenn eine Last ausgeführt oder mehr als ein Byte gespeichert wird. Der Teil der Register und Ausführungseinheiten des Kerns sieht nur binäre Ganzzahlen der Registerbreite.


Es ist möglich, "endian agnostic" code zu schreiben ganze Zahlen zu/von einem Strom von Bytes auf der Maschine der nativen endianness ohne Abhängigkeit serialisieren. z.B. um zusätzliches 4 Bytes in ein int:

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

Das mittlere Endian-Format des PDP11 kommt die Notwendigkeit von 32-Bit-Operationen auf einer 16-Bit-Maschine zu emulieren. Dies geschieht, indem zuerst das hohe Wort und dann das niedrige Wort im Speicher gespeichert wird, obwohl das PDP11 für seine Daten Little Endian verwendet. Dies verursacht die seltsame Endianess. In der Praxis gibt es jedoch keinen wirklichen Leistungsunterschied. Linksverschiebung eine ganze Zahl um eine Stelle im Speicher gespeichert ist noch in drei Anweisungen getan:

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 

Wenn var in Little-Endian gespeichert wird, würde der Code ähnlich sein:

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

Ich * denke * das OP stellte sich vor, ein PDP-Endian 32-Bit-Wort in einem einzigen Vorgang zu verschieben, und dass die Hardware dies komplizierter wäre, als wenn die Bits einfach könnten gehe von rechts nach links (deshalb habe ich meine Antwort auf diesen Teil konzentriert). Upvoted, um darauf hinzuweisen, dass PDP-11 eine 16-Bit-Maschine und tatsächliche Codefolgen ist. –