2016-04-09 4 views
-3

未満4行のアセンブリにこの練習を書く:「AA BB CC DD」(リトルエンディアン)我々は32ビットのコード例で始まるAT&T

を私たちは「AA DD CC BB」したい最終結果として(ビッグエンディアンを)。 私は8行で記述していますが、エントリとして%ebx、終了として%ecxを使用しています。先生は4行未満でこれを書くことができたと言いました.3行が記録されています。私はそれがどのように短縮できるかを知りたいと思っていました。

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

を行うことができますはい、3つの命令でこれを行うことが可能です。しかし、私はサディスティックではない。私は、あなたの仲間の生徒を捨てることも、あなたは早期に組立を諦めることもしません。 **アセンブリは楽しいです**。 'x86'アセンブリの指示を勉強すれば、おそらくもっと良い解決策が見つかるはずです。ここであなたは良い[出発点](http://www.felixcloutier.com/x86)を見つけるでしょう。 – zx485

+0

私はこの質問を間違って読んでいるかもしれませんが、AA DD CC BBがどのようにAA BB CC DDのビックエンディアン形式であるかわかりません。 –

+0

@Michael Petch:そこにはないので、あなたはそれを見ない。ビッグエンディアンはリトルエンディアンに変換されます** 1バイトでRORされます**。 – zx485

答えて

2

私はATTの構文のかどうか分からないが、あなたは

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

あなたはそれを楽しみました。それにもかかわらず、私はあなたに投票をしなければならない。 – zx485

+0

教師の学習の練習を殺す素晴らしい方法。 –

+1

お手伝いします:)ああ!それは皮肉ではなかった。 「bswap」という便利な指示があるので、実際には決してやってはいけません。クイックソートを再実装するCS学生をあまりにも多く習得しなければなりませんでしたテストされたライブラリを使用する代わりに... – Mitch