Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
MaxIkar



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую всех!
У меня проблема.
Имеется задача (Win32):
Создать приложение-ревизор, осуществляющее постановку на учет и последующую проверку файлов на предмет модификации (контроль целостности) с помощью подсчета контрольной суммы файла (CRC) и последующего сравнения с хранящимся эталоном.  
Замечание. Необходимо реализовать механизм, регистрирующий модификацию одного бита.  
Интерфейс пользователя необходимо создать в среде Delphi, механизм проверки целостности файла реализовать на языке Assembler (ассемблерные вставки).
 
Проблема именно с ассемблерной составляющей.
У самого такие идеи: писать ассемблерными вставками в Delphi, сделать dll или включить в состав проекта obj-файл с процедурами.
В архиве http://www.thequietplace.net/godstower/asm.rar
+ один рабочий алгоритм (working), там одна асмовская процедура, в которую всключена готовая таблица crc.
+ dos - 3 досовские
+ yurov - чистый ассемблер
+ my - попытка заставить алгоритм Юрова работать под win32
 
В чем заключается проблема?
Рабочий алгоритм вычисляет другую crc (подозреваю, что там используется другой полином) чем досовкие варианты.
И мне кажется, что лучше использовать не готовую таблицу, а генерировать ее, как это сделано у Юрова.
Что я и попытался сделать. Но у меня ничего не выходит. Пока попытался проинициализировать таблицу (InitTbl), храня ее в глобальном массиве. Дальше же хотел заюзать нижнюю часть алгоритма но учитывая то, что файл буду читать кусками и надо накапливать уже вычисленную crc.
Пытался это оформить dll (думаю, что это хорошая практика на будущее - потом использовать код в других проектах), но и из этого ничего не вышло.
Может кто-нибудь даст советы по поводу портирования 16-битного кода в 32-битный и использования его в Delphi?
Интересует все: от того, как передавать параметры до того, какого типа лучше брать переменные, как хранить данные.
 
Спасибо

Всего записей: 226 | Зарегистр. 04-06-2006 | Отправлено: 23:37 26-04-2007
tar111

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемая публика! Есть ли на данном форуме обсуждение проблем MASM32 в Windows? Самостоятельно, увы, не нашел. За подсказку заранее и искренне благодарю!

Всего записей: 3 | Зарегистр. 09-05-2007 | Отправлено: 15:15 09-05-2007
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tar111

Цитата:
Есть ли на данном форуме обсуждение проблем MASM32 в Windows?

Кроме этой темы по ассемблеру нет ни одной, сколько-нибудь достойной упоминания. Да и эта еле дышит.
Можешь убедиться сам:
http://forum.ru-board.com/forum.cgi?action=filter&forum=33&filterby=topictitle&word=assemb
http://forum.ru-board.com/forum.cgi?action=filter&forum=33&filterby=topictitle&word=asm
http://forum.ru-board.com/forum.cgi?action=filter&forum=33&filterby=topictitle&word=%E0%F1%F1%E5%EC%E1%EB
http://forum.ru-board.com/forum.cgi?action=filter&forum=33&filterby=topictitle&word=%E0%F1%EC

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 14:01 10-05-2007
klad84

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сестре задали задачу на Ассемблеру, я ей помоч не смог, но по-моему, она не сложная:
Найти сумму массива данных.(при условии, что переполнения не происходит). Предварительно занести в область памяти несколько небольших чисел.

Всего записей: 4 | Зарегистр. 15-05-2007 | Отправлено: 11:19 15-05-2007
Argogo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
klad84
А по подробнее: как задается массив - в теле программы, или вводом с клавиатуры, в последнем случае - какова длина массива, фиксированная или вводится с клавы; че суммируем? байты, слова или как? Уточни область вводимых значений.
 
Под DOS или WIN32?

Всего записей: 13 | Зарегистр. 03-01-2007 | Отправлено: 21:56 16-05-2007 | Исправлено: Argogo, 12:10 17-05-2007
klad84

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Argogo

Цитата:
А по подробнее: как задается массив - в теле программы, или вводом с клавиатуры, в последнем случае - какова длина массива, фиксированная или вводится с клавы; че суммируем? байты, слова или как? Уточни область вводимых значений.  
Под DOS или WIN32?


  1. массив задается вводом с клавиатуры;
  2. длина массива фиксированная, не менее 5 элементов;
  3. суммируем элементы получившегося массива;
  4. складываем цифры, которые записаны в ячейках массива;
  5. область вводимых значений - 0-100 (цифры)
  6. под Window's

Всего записей: 4 | Зарегистр. 15-05-2007 | Отправлено: 11:26 21-05-2007
Argogo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
длина массива фиксированная, не менее 5 элементов;

Не менее или не более?
Если не более - проблем, теоретически нет, при условии ввода чисел от 0 до 100.

Всего записей: 13 | Зарегистр. 03-01-2007 | Отправлено: 22:20 21-05-2007
moon6

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Всего записей: 6 | Зарегистр. 29-05-2007 | Отправлено: 17:46 29-05-2007 | Исправлено: moon6, 07:16 04-06-2007
klad84

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Не менее или не более?  
Если не более - проблем, теоретически нет, при условии ввода чисел от 0 до 100.

 
Можно и не более - условие все тоже (от 0 до 100)

Всего записей: 4 | Зарегистр. 15-05-2007 | Отправлено: 08:37 31-05-2007
SPY



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, сможете подкорректировать мою прогу (лаба)?  
написал тут кое-что, а не работает как нужно..
уже запарился, честно..
 
КОД (всё там..)

----------
Знания находятся в головах других людей, а мудрость в собственной...

Всего записей: 645 | Зарегистр. 07-11-2003 | Отправлено: 13:46 31-05-2007 | Исправлено: SPY, 13:50 31-05-2007
Codename 539

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вопрос:
вот код на си:

Код:
void arraction(int a[],int b[],int size)
{
  b[0]=a[0];
  for(int i = 1;i<size;i++) b[i]=a[i]-a[i-1];
}
 

 
А как это будет выглядеть на асме?
 
З.Ы. для девушки задачку надо решить на си, а сама функция на асме должна быть, а я не в зуб ногой, помогите пожалуйста...

Всего записей: 8 | Зарегистр. 04-05-2004 | Отправлено: 19:13 31-05-2007 | Исправлено: Codename 539, 19:47 31-05-2007
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Codename 539
 
заряжаешь свой код на С с опцией /Fa если используете микрософтный компилятор
и все дела...

Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 16:06 01-06-2007 | Исправлено: akaGM, 16:07 01-06-2007
moon6

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите плз, как исправить ошибки:
mov al, matr[dl]        **Error** Illegal indexing    mode
je kon                     **Error** Relative jump out of range by 0023h bytes
mov matr[al], l        **Error** Need register in expression

Всего записей: 6 | Зарегистр. 29-05-2007 | Отправлено: 21:37 01-06-2007 | Исправлено: moon6, 07:15 04-06-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Для адресации (16-битной) могут использоваться только BX, SI и DI. Ещё BP, но он по дефолту юзает SS, а не DS. Ни AL, ни DL для этого не пригодны. Вот ассемблер и ругается. Как же этого не знать - это ж основы...
Команды условных переходов (для процессоров до 386) не умеют прыгать дальше, чем на расстояния -128...+127 байт от следующей на ними инструкции. Но это умеет команда безусловного перехода. Замени je kon на
Код:
jne neKon
jmp kon
neKon:


----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 18:06 02-06-2007 | Исправлено: Qraizer, 18:11 02-06-2007
SPY



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Жаль, что никто не откликнулся на мой зов, но он был скорее от усталости..
 
Вот что у меня получилось, после некоторых преобразований..  
Теперь прога всё считает, но с числами до 32767, и всё потому что у меня сумма исходных чисел всего лишь слово (SumTot dw 0,'$'). Переделывать всё под пару DX:AX и SumTot=DWORD не очень хочется, поэтому необходимо написать проверку на переполнение, и в случае переполнения выводить ошибку "Buffer overflow!".. А ещё деление у меня целочисленное, и дробная часть отбрасывается, даже если результат 2,8 - выводится только 2-ка..
 
Если вы мне подскажите как лучше написать проверку, и трудно ли изменить деление, буду вам премного благодарен!
Заранее благодарю!
 
 
ТУТ КОД

----------
Знания находятся в головах других людей, а мудрость в собственной...

Всего записей: 645 | Зарегистр. 07-11-2003 | Отправлено: 18:20 02-06-2007
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SPY

Цитата:
Если вы мне подскажите как лучше написать проверку

А чем JO (или JC) не нравятся?

Цитата:
 трудно ли изменить деление

Ну, навскидку - умножить остаток на 10 и снова разделить на делитель - получится первая цифра после запятой. Ещё раз это проделать - вторая. Ещё - третья, и так далее, до достижения требуемой точности или пока остаток не окажется нулевым.

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 21:21 02-06-2007
moon6

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer

Цитата:
Для адресации (16-битной) могут использоваться только BX, SI и DI. Ещё BP, но он по дефолту юзает SS, а не DS. Ни AL, ни DL для этого не пригодны. Вот ассемблер и ругается. Как же этого не знать - это ж основы...

Забыл или на лекции пропустил это..
 
Пасиб
 
 
Так.. Ошибки вроде исправил, но теперь другая проблема.
Прога омпилится, запускается, но при вводе числа вылетает окошко с ошибкой:

Код:
<имя ехе'шника>
Процессор NTVDM обнаружил недопустимую инструкцию.
CS:0000 IP:0077 OP:f0 37 05 10 02 Для завершения работы приложения нажмите кнопку "Закрыть".

Дальше прога отказывается работать.
В чём проблема?
Исходник проги, если нада. Но, в принципе, прога откомпилировалась нормально.

Всего записей: 6 | Зарегистр. 29-05-2007 | Отправлено: 11:47 03-06-2007 | Исправлено: moon6, 12:22 03-06-2007
SPY



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Спасибо за советы..
 
Кое-что подправил ещё..
Получилось пока не всё..
1) Деление отрицательного числа приводит к не правильному результату.. (!)
2) Деление всё ещё целочисленное.. (остаток теряется) [пока не правил]
 
Самое важное по пункту (1), никак не найду ошибку..
 
код программы

Всего записей: 645 | Зарегистр. 07-11-2003 | Отправлено: 13:43 03-06-2007 | Исправлено: SPY, 13:45 03-06-2007
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SPY

Цитата:
1) Деление отрицательного числа приводит к не правильному результату.. (!)

Для знакового деления используется idiv. div - это деление беззнаковое.

Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 14:14 03-06-2007
SPY



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
Если бы я не пробовал ))
пока не вышло..

Всего записей: 645 | Зарегистр. 07-11-2003 | Отправлено: 17:24 03-06-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru