![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
tribi |
![]() ![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 5.12.2010 Пользователь №: 2245 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Дорогие участники форума передо мной стоит такая вот нелегкая для девушки задача, мне необходимо написать на асемблере прогу(я просто этот код копирую в блокнот и сохраняю с расширением asm) с функциями Умножения и сложения знакового числа 8 бит, помогите пожалуйста хотя бы подскажите где можно почитать, вообще я нашла алгоритм по отдельности вот, но как в одну прогу объединить не под силу мне, помогите, если вдруг я вообще ошиблась в правильности то если сможtте помогите...
Раскрывающийся текст
Раскрывающийся текст
|
|
|
Iron Bug |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
книга: Питер Абель "Ассемблер и программирование для IBM PC" - классика жанра для начинающих. там подобных примеров полно. а такого уровня задачи почти на любой платформе более-менее одинаково выглядят.
P.S. пример выглядит вполне рабочим. в чём проблема? |
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
tribi, код следует оформлять в теги "["code"]" и "["/code"]" (без кавычек)! К ОФФТОПУ код не относится! |
|
|
tribi |
![]()
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 5.12.2010 Пользователь №: 2245 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Iron Bug все дело что это не просто типичная функция а mmx регистры(
|
|
|
Iron Bug |
![]()
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
а что, для сложения и умножения двух байтов уже mmx понадобился? какая разница, где хранить, если там больше двойного слова результат ну никак не получится?
читайте Абеля и будет вам счастье. для байтовых операций mmx необязателен совершенно. |
|
|
tribi |
![]()
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 5.12.2010 Пользователь №: 2245 Спасибо сказали: 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 – число без знака |
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 14.4.2025, 14:32 |