Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

задачка на турбо ассемблере

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> задачка на турбо ассемблере
Имя
Сообщение << Старые топики   Новые топики >>
задачка на турбо ассемблере - 2009-12-05 17:18:02.463333   
nomersy

Сообщений: 1
Оценки: 0
Присоединился: 2009-12-05 16:50:47.116666
Помогите пожалуйста составить програмку…
    Рассматривая байт как набор логических значений x7 x6 x5 x4 x3 x1 x0 (true -1, false - 0), вычислить логическую формулу
f=(x7 &amp; x6 &amp; x3 ) V (x6 &amp; x4 &amp; x2 &amp; x1) V (x7 &amp; x6 &amp; x2 &amp; x0)
 
Post #: 1
RE: задачка на турбо ассемблере - 2009-12-13 23:57:02.043333   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
Первое что приходит на ум примитивный метод выделения битов со сдвигами:
1. Наложить на число маску, выделяющую нужный бит.
2. Сдвинуть этот нужный бит в 0-ю позицию.
Вот как решается твоя задача на c++, на ассемблере заменяешь
>> на сдвиг вправо.
<< меняешь на сдвиг влево, или же вообще делаешь просто, используешь константы:
1 << 0 = 0000 0001
1 << 1 = 0000 0010
1 << 2 = 0000 0100
1 << 3 = 0000 1000
1 << 4 = 0001 0000
и так далее.
Понадобится 3 регистра (3 регистра по 1 байту), что физически уложится в 2 регистра.
Т.е. всё просто.
#include &lt;QtCore/QCoreApplication&gt; int main(int argc, char *argv[]) { //Пусть это наше значение unsigned int value = 123; //Пример - как самым примитивным образом можно разложить значение по битам unsigned int x0, x1, x2, x3, x4, x5, x6, x7; x0 = (value & (1 &lt;&lt; 0)) &gt;&gt; 0; x1 = (value & (1 &lt;&lt; 1)) &gt;&gt; 1; x2 = (value & (1 &lt;&lt; 2)) &gt;&gt; 2; x3 = (value & (1 &lt;&lt; 3)) &gt;&gt; 3; x4 = (value & (1 &lt;&lt; 4)) &gt;&gt; 4; x5 = (value & (1 &lt;&lt; 5)) &gt;&gt; 5; x6 = (value & (1 &lt;&lt; 6)) &gt;&gt; 6; x7 = (value & (1 &lt;&lt; 7)) &gt;&gt; 7; printf("%d%d%d%d %d%d%d%d\n",x7,x6,x5,x4,x3,x2,x1,x0); //Используя вышеуказанный способ разложения выполняем задачу //f=(x7 & x6 & x3 ) V (x6 & x4 & x2 & x1) V (x7 & x6 & x2 & x0) unsigned int f; //результат вычислений unsigned int f_temp; //переменная для хранения промежуточных результатов f_temp = (value & (1 &lt;&lt; 7)) &gt;&gt; 7; f_temp = f_temp & (value & (1 &lt;&lt; 6)) &gt;&gt; 6; f_temp = f_temp & (value & (1 &lt;&lt; 3)) &gt;&gt; 3; f = f_temp; f_temp = (value & (1 &lt;&lt; 6)) &gt;&gt; 6; f_temp = f_temp & (value & (1 &lt;&lt; 4)) &gt;&gt; 4; f_temp = f_temp & (value & (1 &lt;&lt; 2)) &gt;&gt; 2; f_temp = f_temp & (value & (1 &lt;&lt; 1)) &gt;&gt; 1; f = f | f_temp; f_temp = (value & (1 &lt;&lt; 7)) &gt;&gt; 7; f_temp = f_temp & (value & (1 &lt;&lt; 6)) &gt;&gt; 6; f_temp = f_temp & (value & (1 &lt;&lt; 2)) &gt;&gt; 2; f_temp = f_temp & (value & (1 &lt;&lt; 0)) &gt;&gt; 0; f = f | f_temp; printf("f = %d\n",f); return f; }
Post #: 2
Страниц:  [1]
Все форумы >> [Прочее] >> задачка на турбо ассемблере







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.