Алгоритм на асемблере |
Здравствуйте, гость ( Вход | Регистрация )
Алгоритм на асемблере |
tribi |
5.12.2010, 14:34
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 5.12.2010 Пользователь №: 2245 Спасибо сказали: 0 раз(а) Репутация: 0 |
Дорогие участники форума передо мной стоит такая вот нелегкая для девушки задача, мне необходимо написать на асемблере прогу(я просто этот код копирую в блокнот и сохраняю с расширением asm) с функциями Умножения и сложения знакового числа 8 бит, помогите пожалуйста хотя бы подскажите где можно почитать, вообще я нашла алгоритм по отдельности вот, но как в одну прогу объединить не под силу мне, помогите, если вдруг я вообще ошиблась в правильности то если сможtте помогите...
Раскрывающийся текст
Раскрывающийся текст
|
|
|
Iron Bug |
5.12.2010, 23:57
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
книга: Питер Абель "Ассемблер и программирование для IBM PC" - классика жанра для начинающих. там подобных примеров полно. а такого уровня задачи почти на любой платформе более-менее одинаково выглядят.
P.S. пример выглядит вполне рабочим. в чём проблема? |
|
|
AD |
6.12.2010, 9:26
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
tribi, код следует оформлять в теги "["code"]" и "["/code"]" (без кавычек)! К ОФФТОПУ код не относится! |
|
|
tribi |
6.12.2010, 21:34
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 5.12.2010 Пользователь №: 2245 Спасибо сказали: 0 раз(а) Репутация: 0 |
Iron Bug все дело что это не просто типичная функция а mmx регистры(
|
|
|
Iron Bug |
7.12.2010, 10:26
Сообщение
#5
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
а что, для сложения и умножения двух байтов уже mmx понадобился? какая разница, где хранить, если там больше двойного слова результат ну никак не получится?
читайте Абеля и будет вам счастье. для байтовых операций mmx необязателен совершенно. |
|
|
tribi |
7.12.2010, 17:57
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 5.12.2010 Пользователь №: 2245 Спасибо сказали: 0 раз(а) Репутация: 0 |
Так лаба у меня такая, задания там, поэтому обязательно необходим mmx, вот смотрите:
Раскрывающийся текст Лабораторная работа «Интерфейс с ассемблером. Использование регистров MMX» Содержание работы Для демонстрации скорости работы регистров MMX написать две программы, реализующие одинаковую логику и выводящие время своей работы. Методические указания к выполнению работы Шаблон ассемблерной DLL выглядит следующим образом. .586 ; разрешает непривилегированные ; команды Pentium .XMM ; разрешает команды SSE .MODEL FLAT ; задает модель памяти PUBLIC _nameF@XX ; имя экспортируемой функции .CODE ; сегмент кода _start@12: ; точка входа в DLL mov al, 1; надо вернуть ненулевое число в EAX ret 12 ; очистить стек (передано три параметра) _nameF@XX PROC ; заголовок функции push ebp ; создаем стековый mov ebp, esp ; кадр ; тело функции pop ebp ret _nameF@XX ENDP ; завершение функции END _start@12 ; точка выхода из DLL Для компиляции используется Microsoft Macro Assembler v6.15.8803 (ml.exe), с ключами: /c /coff /Cp /D_MASM_, создающий объектный файл из файла с текстом на языке ассемблера. Для линкования используется Microsoft Incremental Linker v5.12.8278 (link32.exe), создающий файлы с расширениями *.exp, *.lib и *.dll, из файлов с расширениями *.obj и *.lnk. Файл с расширением *.lnk содержит инструкции линкера, следующего вида: /DLL /entry:start /subsystem:windows /export:nameF Для автоматизации компиляции и линкования, рекомендуется создать командный файл, например: rem go.bat d:\work\asm\ml.exe /c /coff /Cp /D_MASM_ %1.asm d:\work\asm\link32.exe %1.obj @%1.lnk содержащий путь к исполняемым файлам, ключи компиляции и имена исходных файлов. Macro Assembler искажает имена функций, следующим образом: перед именем вставляется символ подчеркивания, а после имени символ @ и размер области стека в байтах, которую занимают переданные параметры. Ниже приведен пример создания DLL на ассемблере, содержащей функцию dMMX. Функция складывает содержимое массивов source и target, получает три параметра (размер массивов и адреса входного и выходного массивов), результат помещает в массив source. .586 .XMM .MODEL FLAT PUBLIC _dMMX@12 .CODE _start@12: mov al, 1 ret 12 _dMMX@12 PROC push ebp mov ebp, esp mov eax, [ebp+8] ;в eax - размер массивов mov esi, [ebp+0Ch] ;в esi - адрес массива source mov edi, [ebp+10h] ;в edi - адрес массива target the_loop: movq mm0, [esi] ;поместить в регистр mm0 ;элемент массива source movq mm1, [edi] ;поместить в регистр mm1 ;элемент массива target paddb mm0, mm1 ;сложить регистры mm0 и mm1 add esi, 8 ;следующие 4-ре элемента add edi, 8 ;следующие 4-ре элемента sub eax, 4 ;уменьшить значения счетчика jnz short the_loop ;конец цикла? emms pop ebp ret _dMMX@12 ENDP END _start@12 Варианты заданий на лабораторную работу Сравнить скорость работы программ, написанных на «чистом» Си и с использованием ассемблера. Для этого по собственному номеру в группе (см. таблицу), выбрать последовательность ассемблерных команд и эквивалентную им математическую формулу. Программу, написанную на Си необходимо компилировать с оптимизацией по скорости. Ассемблерная команда 8 бит sig* умножение и сложение 4 * - sig – знаковое число, uns – число без знака |
|
|
Текстовая версия | Сейчас: 2.1.2025, 23:41 |