Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перестановка байтов в 32 разрядном слове 
:(
    Опции темы
savigm
  Дата 13.10.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.12.2008
Где: г. Зеленоград

Репутация: нет
Всего: нет



Нужно переставить байты местами с Big-Endian на Little-Endian, т.е. 4->1, 3->2, 2->3, 1->4.

Я это сделал с использованием двух регистров, помимо исходного(архитектура MIPS32):
Код

        andi    v0, a0, 0xff
        sll     v0, v1, 8
        srl     a0, a0, 8
        andi    v1, a0, 0xff
        or      v0, v0, v1
        sll     v0, v0, 8
        srl     a0, a0, 8
        andi    v1, a0, 0xff
        or      v0, v0, v1
        sll     v0, v0, 8
        srl     a0, a0, 8
        andi    v1, a0, 0xff
        or      v0, v0, v1

Исходный регистр a0, результат в v0.

Вопрос: можно ли сделать то-же самое с использованием одного регистра, помимо исходного?
PM MAIL ICQ   Вверх
sgi1981
Дата 13.10.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 7
Всего: 10



Существует инструкция bswap (машинный код 00001111:11001reg). В качестве операнда 32-bit архитектуры может быть указан только 32-разрядный регистр.


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
savigm
  Дата 14.10.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.12.2008
Где: г. Зеленоград

Репутация: нет
Всего: нет



Цитата(sgi1981 @ 13.10.2009,  17:30)
Существует инструкция bswap (машинный код 00001111:11001reg). В качестве операнда 32-bit архитектуры может быть указан только 32-разрядный регистр.

Это для x86? Что-то в mips32 я не нашел такой инструкции.
Смотрел в MIPS32® Architecture For Programmers Volume II: The MIPS32® Instruction Set.
Можно скачать с mips.com, только нужна регистрация вроде.
PM MAIL ICQ   Вверх
Logree
Дата 14.10.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: 1
Всего: 2



Есть такая книжка Алгоритмические трюки для программистов Генри Уоррен, мл. Я думаю там есть всё что тебе может потребоваться, конкретно по твоему вопросу смотри главу 7.


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
savigm
Дата 15.10.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 15.12.2008
Где: г. Зеленоград

Репутация: нет
Всего: нет



Цитата(Logree @ 14.10.2009,  20:39)
Есть такая книжка Алгоритмические трюки для программистов Генри Уоррен, мл. Я думаю там есть всё что тебе может потребоваться, конкретно по твоему вопросу смотри главу 7.

Смотрел уже, там алгоритмы для Си, и примеры вроде только для манипулирования битами, а не байтами, хотя в названии главы и указываются биты и байты.

Вообщем факт, нужно два доп. регистра иначе никак. В MIPS32 просто нет таких операций, чтобы не использовать два доп. регистра.
PM MAIL ICQ   Вверх
airyashov
Дата 16.10.2009, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



у Вас есть команда WSBH RD, RS
Код

wsbh v0,a0
wsbh a0,a0
sll     a0, a0, 16 если это не кольцевой сдвиг, то наверное все заполнится 0-ми
srl     v0,v0, 16
or v0,v0,a0     


Это сообщение отредактировал(а) airyashov - 16.10.2009, 07:26


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.