Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1509 | Дата выхода: | 03.04.2012, 02:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 100 / 41 | Вопросов / ответов: | 1 / 1 | Консультация # 185720: Здравствуйте, уважаемые эксперты! Прошу вас написать программу вот с таким заданием: Дано 32-битное слово, поменять местами 15 и 16 биты. Как она будет выглядеть в программе, я не понимаю, так что помогите решить, желательно к каждой строке комментарии. п.с. Ассемблер : TASM Размер переменных: двойное слово 32-битные ... Консультация # 185720: Здравствуйте, уважаемые эксперты! Прошу вас написать программу вот с таким заданием:
Дано 32-битное слово, поменять местами 15 и 16 биты.
Как она будет выглядеть в программе, я не понимаю, так что помогите решить, желательно к каждой строке комментарии.
п.с. Ассемблер : TASM Размер переменных: двойное слово 32-битные регистры используем. Число прописываем сами в файле asm
Заранее спасибо. Дата отправки: 31.03.2012, 01:56 Вопрос задал: Yankov Dmitry (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Yankov Dmitry! Программа сделана универсально, может менять местами любые два бита Кроме того, сделана из расчета, что биты считаются с 0, Т.е., меняя биты 15 и 16, мы поменяем местами старший бит младшего слова и младший бит старшего. Если Вы считаете биты с единицы, т.е. нужно поменять местами два старших бита младшего слова, то поменяйте в программе номера бит на 14 и 15 Удачи в понимании ассемблера!
Код : .model small .data num dd 00000000000000001101010110101010b .code .386 start: mov ax, @data mov ds, ax mov eax, num ;наше число mov cl, 15 ;номер первого бита (счет с 0) mov ch, 16 ;номер второго бита (счет с 0) call ChangeBits ;меняем биты в eax mov num, eax ;сохраняем результат mov ax, 4c00h int 21h ;меняем местами два бита врегистре eax, ;номера бит заданы в cl и ch ChangeBits proc ;сформируем маску первого бита mov edx, 1 ;поставим 1 в нужную позицию shl edx, cl ;номер бита будет число, на которое надо сдвинуть ;сформируем маску второго бита mov cl, ch ;его номер mov ebx, 1 shl ebx, cl ;маска бита в ebx ;сформируем общую маску двух бит or edx, ebx ;проверим, какие биты на указанных местах mov ecx, eax ;наше число and ecx, edx ;оставляем только нужные биты jz CBret ;если оба нуля, то менять местами не надо cmp ecx, edx ;если равны маске, значит оба единицы, jz CBret ;также не меняем xor eax, edx ;если разные, то операцией xor с единицами меняем местами CBret: ret ChangeBits endp end start  | Консультировал: Лысков Игорь Витальевич (Старший модератор) Дата отправки: 31.03.2012, 20:29 5 нет комментария ----- Дата оценки: 31.03.2012, 21:29 | Рейтинг ответа: 0 |
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий