Еще одна занимательная задача- MVM |
Здравствуйте, гость ( Вход | Регистрация )
Еще одна занимательная задача- MVM |
17.03.2020 - 03:17
Сообщение
#1
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Столкнулся с необходимостью эмулировать инструкцию MVM (move with mask) из Allen Bradley.
Инструкция [MVM S M D] копирует из регистра S в регистр D биты, соответствующие включенным битам регистра-маски M, не затрагивая остальных битов в D. Решение получилось неожиданно громоздким: 4 инструкции и вспомогательный регистр. Сможет ли кто-нибудь предложить решение с меньшим количеством инструкций? Сообщение отредактировал Sergei Troizky - 31.05.2020 - 19:57 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
17.03.2020 - 09:27
Сообщение
#2
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
WAND - для обнуления бит
WOR - для установки бит Для вашего случая WOR S k4M D Сообщение отредактировал m_by - 17.03.2020 - 10:01 |
|
|
17.03.2020 - 15:38
Сообщение
#3
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Торопитесь. Либо неверно поняли задание.
Биты, указанные маской, должны быть СКОПИРОВАНЫ из источника в получатель. Ваше решение неверно: активные биты в получателе останутся включенными, а не скопированными из источника, если там были выключены. -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
17.03.2020 - 17:15
Сообщение
#4
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
не верно воспринял задание ...
таблицу истинности бы тогда вход 1001 маска 1100 выход тек. 0110 должно стать ?? |
|
|
17.03.2020 - 23:46
Сообщение
#5
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
не верно воспринял задание ... таблицу истинности бы тогда вход 1001 маска 1100 выход тек. 0110 должно стать ?? Должно стать 1010. Первые два бита, указанные маской, скопированы из источника. Вторые два остались в получателе незатронутыми. Сообщение отредактировал Sergei Troizky - 18.03.2020 - 01:09 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
18.03.2020 - 09:42
Сообщение
#6
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
тогда ваш способ похоже правильный
- получить обратную маску - очистка выходного регистра по обратной маске - маскирование входного слова - объединение результатов |
|
|
18.03.2020 - 17:51
Сообщение
#7
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Он правильный без "похоже", т.к. работает.
Интересно было бы найти более компактное решение, по количеству инструкций. Сообщение отредактировал Sergei Troizky - 19.03.2020 - 02:01 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
20.03.2020 - 09:45
Сообщение
#8
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
А какой контроллер ?
Можно реализовать через цикл обхода по битам, только когда так делал последний раз - время выполнения программы утроилось ((. |
|
|
20.03.2020 - 22:14
Сообщение
#9
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Модель (и даже производитель) контроллера непринципиальны.
Подразумевается лишь отсутствие в нем такой инструкции. Задача интересна с алгоритмической точки зрения и ясно сформулирована на предмет сокращения кода. Любой код цикла будет не короче 4-х инструкций, т.к. 3 инструкции необходимы лишь для организации самого цикла. Сообщение отредактировал Sergei Troizky - 31.05.2020 - 19:59 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
25.03.2020 - 09:34
Сообщение
#10
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Код WOR M D D
WXOR M D D WOR S D D Сообщение отредактировал inntele - 25.03.2020 - 09:38 -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
25.03.2020 - 10:14
Сообщение
#11
|
|
Гигант мысли Группа: Пользователи Сообщений: 408 Регистрация: 3.08.2014 Пользователь №: 10311 |
Код WOR M D D WXOR M D D WOR S D D На выходе будет 1011 Должно быть 1010 -------------------- There are only 10 types of people in the world — those who understand binary, and those who don't.
|
|
|
25.03.2020 - 11:42
Сообщение
#12
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Код WOR M D D WXOR M D D WOR S D D На выходе будет 1011 Должно быть 1010 Конечно. Это лишь повод тщательнЕе подзадуматься над реализацией. Но у задачи явно короткое решение. -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
25.03.2020 - 12:13
Сообщение
#13
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Код WOR M D D WAND M S T WXOR T D D WXOR M D D , где T - промежуточный регистр вычислений -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
26.03.2020 - 22:37
Сообщение
#14
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Код WOR M D D WAND M S T WXOR T D D WXOR M D D , где T - промежуточный регистр вычислений Увы, по-прежнему 4 инструкции. Правда, иначе, чем у меня. Похоже, короче не сделать. Мой вариант (на мой взгляд, чуть нагляднее для понимания): WXOR M #FFFF T WAND D T D WAND S M T WOR D T D Сообщение отредактировал Sergei Troizky - 26.03.2020 - 22:41 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
27.03.2020 - 07:35
Сообщение
#15
|
|
Гуру Группа: Пользователи Сообщений: 1000 Регистрация: 19.08.2009 Пользователь №: 9149 |
Похоже, короче не сделать. Мой вариант (на мой взгляд, чуть нагляднее для понимания): Да, практическая реализация может разниться, тем не менее, метода (алгоритм) у них едина и меньше, чем за четыре команды, нереализуема. Отличие Вашего кода от моего заключается лишь в том, что Вы предустанавливаете маскируемые биты в слове назначения нулями, я же единицами и после перезаписи эти биты инвертирую. -------------------- Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
|
|
|
Текстовая версия | Сейчас: 5.06.2024 - 10:40 |