![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Студент
Пользователь
Регистрация: 13.11.2009
Сообщений: 65
|
![]()
Здравствуйте, у меня нубский вопрос.
Дано: x1,x2,x3,x4,x5,x6,x7,x8 - это биты одного байта. нужно написать программу на ассемблере для решения логического выражения: Код:
при помощи shr раскидать биты на 8 байт, потом работать с этими байтами. Но вот код получится очень очень длинный. Моя идея проста и не оригинальна, и я думаю есть более практичные решения этой задачи ![]() |
![]() |
![]() |
![]() |
#2 |
Студент
Пользователь
Регистрация: 13.11.2009
Сообщений: 65
|
![]()
Появилась идея
Выражение будет равно 1 если: x7 = 1 (x1 or x2) and x6 = 1 (x1 or x2) and (x2 or x4) and (5x or x8) = 1 |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
TRIZER
Идея неверная, если х7 = 1, тогда все выражение равно 1, так как X + 1 = 1 при любых значениях Х (x1 + x3 + 1)(x2 + x4 + x6 + 1)(x5 + x6 + 1 + x8) = 1 & 1 & 1 = 1 но ведь х7 может быть равен и нулю... Нужно идти другим путем. В алгебре логики есть закон дистрибутивности (А+В)(А+С)=А+ВС для твоего примера (А+В)(А+С)(A+D)=(А+ВС)(A+D)=A+BCD группируем и переставляем элементы ((x1 + x3) + x7)((x2 + x4 + x6) + x7)((x5 + x6 + x8) + x7) = (x1 + x3)((x2 + x4) + x6)((x5 + x8) + x6) + x7 = снова используем закон дистрибутивности (x1 + x3)((x2 + x4)(x5 + x8) + x6) + x7 за счет этого немного упрощаем выражение. Теперь при помощи SHR и AND X,1 делаешь из битов 8 байт и работаешь с этими байтами Последний раз редактировалось Mikl___; 17.05.2011 в 08:23. |
![]() |
![]() |
![]() |
#4 |
Студент
Пользователь
Регистрация: 13.11.2009
Сообщений: 65
|
![]()
имел в виду
x7 = 1 либо (x1 or x2) and x6 = 1 либо (x1 or x2) and (x2 or x4) and (5x or x8) = 1 если одно из этих условий выполняется выражение гарантированно обращается в 1 |
![]() |
![]() |
![]() |
#5 |
Студент
Пользователь
Регистрация: 13.11.2009
Сообщений: 65
|
![]()
в общем я так понял короткого кода не получится?
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
> x1,x2,x3,x4,x5,x6,x7,x8 - это биты одного байта
если эти биты уже хранятся в одном байте (регистре), скажем AL, то задача элементарная: Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 17.05.2011 в 10:18. Причина: не проснулся |
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
TRIZER
если объединить мою идею и решение veniside то все достаточно просто TEST AL,01000000b; x7 = 0 ? jnz y_equ_1 TEST AL,00000101b; x3 or x1 = 0 ? jz y_equ_0 TEST AL,00100000b; x6 = 0 ? jnz y_equ_1 TEST AL,00001010b; x4 or x2 = 0 ? jz y_equ_0 TEST AL,10110000b; x8 or x5 = 0 ? jz y_equ_0 y_equ_1: mov y,1 jmp exit y_equ_0: mov y,0 exit: Последний раз редактировалось Mikl___; 17.05.2011 в 11:37. |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
в общем случае, если проверок много, лучше код с переходами, чтобы не проверять лишнего. При этом в начале ставим проверки, вероятность срабатывания которых выше.
А если провеорк мало, как в нашем примере, возможно, лучше вобще без переходов: Код:
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Регулярные выражения | NewMan123 | Помощь студентам | 8 | 04.11.2020 20:23 |
Регулярные выражения | DoGFoX | Общие вопросы Delphi | 1 | 03.02.2011 10:49 |
Регулярное выражения в JS | vedro-compota | JavaScript, Ajax | 3 | 15.12.2010 19:11 |
регулярные выражения | wyvern | PHP | 3 | 09.04.2009 22:15 |
решение выражения на паскале | bonys91 | Помощь студентам | 2 | 02.04.2009 22:18 |