2016-04-09 6 views
-3

wir mit einem 32-Bit-Code zum Beispiel starten: "AA BB CC DD" (Little Endian)Schreiben Sie diese Übung in weniger als 4 Zeilen Montage AT & T

wir "AA DD CC BB" als Endergebnis (Big Endian wollen). Ich habe es geschafft, es in 8 Zeilen zu schreiben, mit% ebx als Eintrag und% ecx als Ausgang. Der Lehrer erwähnte, dass es möglich ist, dies in weniger als 4 Zeilen zu schreiben, wobei 3 die Aufzeichnung ist. Ich war neugierig zu sehen, wie es verkürzt werden kann.

mov %R1, %ebx 
mov %bx, %cx 
shl $16, %ecx 
mov %cl, %dl 
mov %bl, %cl 
mov %bh, %dh 
shr %16, %edx 
and %edx, %ecx 
+0

Ja tun, es ist möglich, dies mit drei Befehle zu tun. Aber ich unterlasse es, sadistisch zu sein. Ich möchte auch nicht, dass du deine Kommilitonen absetzt oder dass du willst, dass du vorzeitig auf das Lernen von Assembly verzichtest. ** Montage macht Spaß '**. Studieren Sie die Anweisungen der 'x86'-Assembly und Sie werden wahrscheinlich eine bessere Lösung finden. Hier finden Sie einen guten [Startpunkt] (http://www.felixcloutier.com/x86). – zx485

+0

Vielleicht irre ich diese Frage, aber ich sehe nicht, wie AA DD CC BB die Big-Endian-Form von AA BB CC DD ist. –

+0

@Michael Petch: Du siehst es nicht, weil es nicht da ist. Es ist Big-Endian konvertiert zu Little-Endian ** 'ROR'ed um ein Byte **. – zx485

Antwort

2

Ich bin nicht sicher, der att-Syntax, aber Sie können

bswap ebx ; AA BB CC DD -> DD CC BB AA  Swap byte order 
ror ebx, 8 ; DD CC BB AA -> AA DD CC BB  Roll right 8 bits 
+0

Sie haben den Spaß daraus gemacht. Trotzdem muss ich Ihnen eine Stimme geben. – zx485

+0

Wundervolle Art, die Lernübung des Lehrers zu töten. –

+1

Glücklich zu helfen :) Oh! das war nicht sarkastisch. Ich bin froh, jede Übung zu behindern, die nicht mit "Natürlich würde man das nie im richtigen Leben machen, da es eine praktische' bswap'-Anweisung gibt. Ich musste zu viele CS-Studenten umschulen, die Quicksort neu implementieren anstatt eine getestete Bibliothek zu benutzen ... – Mitch