2016-04-09 34 views
-3

我們先從一個32位代碼如:「AA BB CC DD」(小端)寫這項工作在不到4線裝配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

是的,這是可能的三條指令來做到這一點。但我不要虐待。我既不想讓你的同學失望,也不希望你過早放棄學習大會。 **大會很有趣'**。研究'x86'彙編的指令,你可能會找到一個更好的解決方案。在這裏你會找到一個好的[起點](http://www.felixcloutier.com/x86)。 – zx485

+0

也許我誤解了這個問題,但我不明白AA DD CC BB是AA BB CC DD的大端形式。 –

+0

@邁克爾佩奇:你沒有看到它,因爲它不在那裏。它是大端轉換爲小端的**'ROR'ed'的一個字節**。 – 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