2016-04-09 5 views
-3

мы начинаем с 32 битным кодом, например: "AA BB CC DD" (Little Endian)Написать это упражнение менее чем за 4 линии сборки AT & T

мы хотим "AA DD CC BB" в качестве конечного результата (большой Endian). Мне удалось написать его в 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

@Michael Petch: Вы этого не видите, потому что его там нет. Это big-endian, преобразованный в little-endian ** «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, которые переопределяют quicksort вместо использования проверенной библиотеки ... – Mitch

 Смежные вопросы

  • Нет связанных вопросов^_^