Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Asm для начинающих > ассемблерная процедура. |
Автор: 1VITOLD1 23.12.2008, 23:02 |
Помогите сделать процедуру SHR1(var M1;len,count: word), где М1-большое целое положительное число (байтовый масив длинной len), count - количество розрядов сдвига. Которая реализовала бы операцыю линейного сдвига вправо на количество двоичных розрядов, что задана параметром count .При этом теряеться count младшых розрядов, а в count старшых розрядов заноситься 0. При роботе должны использоваться команды для 32-розрядных даных. Если значение len не кратно 4, то при необходимости для последних байт использовать команды для 8-розрядных даных. Заранее благодарен ) |
Автор: Mikl_ 24.12.2008, 05:43 |
1VITOLD1, Для получения ответа обязательно укажи название своего ВУЗа и факультета -- это мне необходимо для статистики судя по оформлению процедуры SHR1(var M1;len,count: word), это должна быть процедура для Паскаля с ассемблерной вставкой или это "чистый" ассемблер? Если целиком на ассемблере, то на каком MASM, TASM, NASM, YASM, A86? Не пойму "зсув" это по-белорусски "сдвиг"? |
Автор: 1VITOLD1 24.12.2008, 10:38 |
Здесь процедура для Паскаля с ассемблерной вставкой ...Используем транслятор MASM.. ВДТУ факультет информатики.. заранее спасибо за помощь. |
Автор: Mikl_ 25.12.2008, 04:53 | ||
1VITOLD1,
|
Автор: 1VITOLD1 26.12.2008, 22:33 | ||
Mikl_, Спасибо большое.. а вот не подскажите как можно переделать процедуру,(делает сдвиг влево ) под анологичную..но что бы сдвигала число вправо вот есть КОД процедуры со сдвигом влево
заранее СПАСИБО.. |
Автор: Mikl_ 27.12.2008, 05:20 | ||
1VITOLD1, в двух словах -- меняешь rol на ror и двигаешься не от конца массива, а от его начала и, соответственно, меняешь dec si, dec di на inc si, inc di для сдвига сразу 8 байт под .386 можно использовать shrd / shld
![]() |
Автор: 1VITOLD1 27.12.2008, 18:25 |
Mikl_, Винницкий государственный технический университет ..я понимаю что с начала надо двигаться.....Но не получаеться.. коректно реализовать что бы указатель был вначале и исполнялись переходы( |
Автор: Mikl_ 29.12.2008, 10:20 | ||
1VITOLD1, А мой-то вариант чем был плох? он и короче и понятнее ![]()
lds si, @mas ;грузим сегмент в ds, а смещение в si<-- si указывает на начало массива mov bx, @len <-- в bx длину массива mov di, bx ;di = len dec di ; len - 1 add di, si ; адрес последнего элемента в массиве <-- di указывает на предпоследний элемент массива тебе нужно просто mov di,si <-- di указывает на начало массива и везде где у тебя dec di пиши inc di а вместо sub di,4 ;следующие 4 байта пишешь add di,4 ![]() |
Автор: 1VITOLD1 29.12.2008, 22:33 |
Спасибо... |