IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в эту темуОткрыть новую тему
> Еще одна занимательная задача- MVM
Sergei Troizky
сообщение 17.03.2020 - 03:17
Сообщение #1


Гигант мысли
****

Группа: Пользователи
Сообщений: 353
Регистрация: 30.12.2004
Пользователь №: 108



Столкнулся с необходимостью эмулировать инструкцию MVM (move with mask) из Allen Bradley.
Инструкция [MVM S M D] копирует из регистра S в регистр D биты,
соответствующие включенным битам регистра-маски M, не затрагивая остальных битов в D.
Решение получилось неожиданно громоздким: 4 инструкции и 2 вспомогательных регистра вспомогательный регистр.
Сможет ли кто-нибудь предложить решение с меньшим количеством инструкций?

Сообщение отредактировал Sergei Troizky - 26.03.2020 - 22:40


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 17.03.2020 - 09:27
Сообщение #2


Гигант мысли
****

Группа: Пользователи
Сообщений: 252
Регистрация: 15.11.2007
Пользователь №: 6407



WAND - для обнуления бит
WOR - для установки бит

Для вашего случая

WOR S k4M D

Сообщение отредактировал m_by - 17.03.2020 - 10:01
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 17.03.2020 - 15:38
Сообщение #3


Гигант мысли
****

Группа: Пользователи
Сообщений: 353
Регистрация: 30.12.2004
Пользователь №: 108



Торопитесь. Либо неверно поняли задание.
Биты, указанные маской, должны быть СКОПИРОВАНЫ из источника в получатель.
Ваше решение неверно: активные биты в получателе останутся включенными,
а не скопированными из источника, если там были выключены.


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 17.03.2020 - 17:15
Сообщение #4


Гигант мысли
****

Группа: Пользователи
Сообщений: 252
Регистрация: 15.11.2007
Пользователь №: 6407



не верно воспринял задание ...
таблицу истинности бы тогда

вход 1001
маска 1100
выход тек. 0110
должно стать ??
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 17.03.2020 - 23:46
Сообщение #5


Гигант мысли
****

Группа: Пользователи
Сообщений: 353
Регистрация: 30.12.2004
Пользователь №: 108



Цитата(m_by @ 17.03.2020 - 17:15) *
не верно воспринял задание ...
таблицу истинности бы тогда

вход 1001
маска 1100
выход тек. 0110
должно стать ??

Должно стать 1010.
Первые два бита, указанные маской, скопированы из источника.
Вторые два остались в получателе незатронутыми.

Сообщение отредактировал Sergei Troizky - 18.03.2020 - 01:09


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 18.03.2020 - 09:42
Сообщение #6


Гигант мысли
****

Группа: Пользователи
Сообщений: 252
Регистрация: 15.11.2007
Пользователь №: 6407



тогда ваш способ похоже правильный
- получить обратную маску
- очистка выходного регистра по обратной маске
- маскирование входного слова
- объединение результатов
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 18.03.2020 - 17:51
Сообщение #7


Гигант мысли
****

Группа: Пользователи
Сообщений: 353
Регистрация: 30.12.2004
Пользователь №: 108



Он правильный без "похоже", т.к. работает.
Интересно было бы найти более компактное решение, по количеству инструкций.

Сообщение отредактировал Sergei Troizky - 19.03.2020 - 02:01


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 20.03.2020 - 09:45
Сообщение #8


Гигант мысли
****

Группа: Пользователи
Сообщений: 252
Регистрация: 15.11.2007
Пользователь №: 6407



А какой контроллер ?
Можно реализовать через цикл обхода по битам,
только когда так делал последний раз - время выполнения программы утроилось ((.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 20.03.2020 - 22:14
Сообщение #9


Гигант мысли
****

Группа: Пользователи
Сообщений: 353
Регистрация: 30.12.2004
Пользователь №: 108



Модель (и даже производитель) контроллера непринципиальны.
Подразумевается лишь отсутствие в нем такой инструкции.
Задача интересна с алгоритмической точки зрения и ясно сформулирована на предмет сокращения кода.
Любой код цикла будет длиннее не короче 4-х инструкций, т.к. 3 инструкции необходимы лишь для организации самого цикла.

Сообщение отредактировал Sergei Troizky - 4.04.2020 - 22:17


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 25.03.2020 - 09:34
Сообщение #10


Маньяк
*****

Группа: Пользователи
Сообщений: 934
Регистрация: 19.08.2009
Пользователь №: 9149



Код
WOR M D D
WXOR M D D
WOR S D D


Сообщение отредактировал inntele - 25.03.2020 - 09:38


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
acoustik
сообщение 25.03.2020 - 10:14
Сообщение #11


Гигант мысли
****

Группа: Пользователи
Сообщений: 405
Регистрация: 3.08.2014
Пользователь №: 10311



Цитата(inntele @ 25.03.2020 - 15:34) *
Код
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.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 25.03.2020 - 11:42
Сообщение #12


Маньяк
*****

Группа: Пользователи
Сообщений: 934
Регистрация: 19.08.2009
Пользователь №: 9149



Цитата(acoustik @ 25.03.2020 - 11:14) *
Цитата(inntele @ 25.03.2020 - 15:34) *
Код
WOR M D D
WXOR M D D
WOR S D D

На выходе будет 1011
Должно быть 1010


Конечно. Это лишь повод тщательнЕе подзадуматься над реализацией. Но у задачи явно короткое решение.


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 25.03.2020 - 12:13
Сообщение #13


Маньяк
*****

Группа: Пользователи
Сообщений: 934
Регистрация: 19.08.2009
Пользователь №: 9149



Код
WOR M D D
WAND M S T
WXOR T D D
WXOR M D D

, где T - промежуточный регистр вычислений


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 26.03.2020 - 22:37
Сообщение #14


Гигант мысли
****

Группа: Пользователи
Сообщений: 353
Регистрация: 30.12.2004
Пользователь №: 108



Цитата(inntele @ 25.03.2020 - 12:13) *
Код
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


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
inntele
сообщение 27.03.2020 - 07:35
Сообщение #15


Маньяк
*****

Группа: Пользователи
Сообщений: 934
Регистрация: 19.08.2009
Пользователь №: 9149



Цитата(Sergei Troizky @ 26.03.2020 - 23:37) *
Похоже, короче не сделать.
Мой вариант (на мой взгляд, чуть нагляднее для понимания):


Да, практическая реализация может разниться, тем не менее, метода (алгоритм) у них едина и меньше, чем за четыре команды, нереализуема. Отличие Вашего кода от моего заключается лишь в том, что Вы предустанавливаете маскируемые биты в слове назначения нулями, я же единицами и после перезаписи эти биты инвертирую.


--------------------
Мозг любого человека работает круглосуточно. Но мозг инженера отличается тем, что способен при этом проанализировать задачу, синтезировать несколько техничных ее решений, а затем выбрать из этих решений наилучшее.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

2 страниц V   1 2 >
Ответить в эту темуОткрыть новую тему
8 чел. читают эту тему (гостей: 8, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 9.04.2020 - 17:06