2016-04-09 38 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