+ Ответить в теме
Показано с 1 по 6 из 6.

Тема: симметричное отображение

  1. #1
    dummy Akimich is on a distinguished road
    Регистрация
    06.07.2010
    Сообщений
    6

    симметричное отображение

    Формулировка задачи: Реализуйте с помощью логических операций симметричное отображение старшего байта слова на младший байт с потерей исходных значений. Искал в интернете и книгах , но не нашел что такое симметричное отображение байтов. Помогите пожалуйста, заранее спасибо.

  2. #2
    developer BulldozerBSG is on a distinguished road
    Регистрация
    09.01.2010
    Сообщений
    140

    Re: симметричное отображение

    было: 10100111 00000000
    стало: 10100111 11100101

  3. #3
    system architect somewhere will become famous soon enough somewhere will become famous soon enough Аватар для somewhere
    Регистрация
    31.08.2006
    Адрес
    71 RUS
    Сообщений
    1,285

    Re: симметричное отображение

    Я понимаю такую формулировку, как преобразование битов старшего байта и формирование новых битов младшего байта таким образом, что 15 бит = 0 биту, 14 = 1, 13 = 2 и т.д. Таким образом получим симметрию относительно "границы" младшего и старшего байта Допустим в AH мы имеем некоторое значение, которое нужно симметрично отразить в AL.
    Разумеется одним из самых быстрых и оптимальных методов реверса является составление 256-байтовой таблицы соответствия. Это выгодно, если реверс битов запускается очень часто. Вторым по популярности и простоте является метод сдвига ROL - ROR двух регистров. А если обязательно через логические операции, то примерно так:
    Код :
    ...
    xor al, al
    test ah, 128
    jz @bit6
    or al, 1
    @bit6: test ah, 64
    jz @bit5
    or al, 2
    ...
    и так далее. В данном примере преобразование без потерь значения в AH. Надо заметить что используя только лишь логические операции невозможно выполнить данное преобразование. Понадобятся как минимум команды перемещения ну или хотя бы условного перехода, сдвига.

    Для процессоров класса 386/486 можно использовать BT, но врядли это даст какой либо выигрыш.
    В некоторых семействах процессоров (не х86) есть специальная команда SWAP, которая собственно только этим и занимается, что переворачивает байт задом наперед.
    Последний раз редактировалось somewhere; 06.07.2010 в 13:39.
    It's a long way to the top if you wanna rock'n'roll

  4. #4
    dummy Akimich is on a distinguished road
    Регистрация
    06.07.2010
    Сообщений
    6

    Re: симметричное отображение

    somewhere, спасибо за ваш исчерпывающий ответ Эту программу мне нужно сделать как ассемблерную вставку в C++,но она не работает
    Код :
    void main(void)
    {
       
        setlocale(LC_ALL,"Russian"); //установка локали в русскую, чтобы работала кирилица
     //инициализация целочисленных переменных
            std::cout << "3-8. Реализуйте с помощью логических симметричное отображение старшего байта слова на младший байт с потерей исходных значений. "<< "\n";

        unsigned char rez=0;
            __asm
    {
    MOV ax,1234h
    XOR al,al
    or al,ah
    ROR al,4
    MOV rez,ax
    }
    std::cout << "При расчет на языке Assembler получилось: " <<rez;
    getch();
    return;

    error C2443: конфликт размеров операндов в строчке MOV rez,ax

  5. #5
    system architect somewhere will become famous soon enough somewhere will become famous soon enough Аватар для somewhere
    Регистрация
    31.08.2006
    Адрес
    71 RUS
    Сообщений
    1,285

    Re: симметричное отображение

    1. Последовательность команд
    Код :
    xor al, al
    or al, ah
    эквивалентна команде mov al, ah

    2. ROR не является логической операцией - это операция сдвига
    3. rez объявлен как unsigned char, значит он размером в байт. Следует использовать mov rez, al. С другой стороны нужно видеть оба байта, старший и младший. Тогда нужно делать rez типа int
    It's a long way to the top if you wanna rock'n'roll

  6. #6
    dummy Akimich is on a distinguished road
    Регистрация
    06.07.2010
    Сообщений
    6

    Re: симметричное отображение

    Спасибо всем, разобрался с этой задачей.
    Последний раз редактировалось Akimich; 08.07.2010 в 07:15.

+ Ответить в теме

Похожие темы

  1. Найти самое длинное симметричное слово
    By nitrozevs in forum задачи на C и C++
    Replies: 1
    Последнее сообщение: 28.03.2010, 08:42
  2. Отображение скрытых листов
    By СашаСВ in forum MS Office и VB(A).
    Replies: 6
    Последнее сообщение: 06.10.2009, 17:12
  3. Найти самое длинное симметричное слово
    By xVeteRx in forum задачи на C и C++
    Replies: 2
    Последнее сообщение: 12.04.2009, 21:33
  4. Replies: 0
    Последнее сообщение: 12.09.2007, 07:09
  5. Replies: 4
    Последнее сообщение: 08.03.2007, 07:31

Ваши права в разделе

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения