Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2009, 18:30   #1
prosport91
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 14
По умолчанию Вычисление формулы на ассемблере

Начал осваивать язык ассемблер. Но как то не очень удачно это проходит. Немогу разобраться как работать с арифметическими действиями, куда что помещается. Нужна помощь в написание кода на Ассеблере для данного выражения, хотелось бы с комментариями. Буду очень благодарен. Вот пример.
Изображения
Тип файла: jpg Изображение.jpg (9.2 Кб, 152 просмотров)
prosport91 вне форума Ответить с цитированием
Старый 07.10.2009, 20:30   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Код:
a dd 0
d dd 0
c dd 0
result dd 0

mov eax,[a]
shl eax,2
push eax
mov eax,[d]
mov ecx,[c]
xor edx,edx
mul ecx
push eax
mov ecx,3
div ecx
push eax
mov eax,[esp+4]
shl eax,2
sub eax,[a]
push eax
mov eax,[a]
add eax,[a]
add eax,[a]
pop ecx
xchg eax,ecx
xor edx,edx
div ecx
push eax
mov eax,[esp+12]
sub eax,[esp+8]
add eax,[esp]
mov [result],eax
Простите - давно не спал, так что скорее всего где то ошибся с оффсетами в стеке. Думаю суть из этого вполне понятна.
Каждая часть разделенная + или - вычисляется отдельно, а dc - сохраняется как вторично используемый результат(для dc^2), результат сохраняется на время в стеке и в конце от самого первого вычисления(a^2) просто вычитаются/прибавлються остальные.

PS: Код не претендует на премию по оптимизированности, так как некоторые вещи можно было сделать лучше, скажем умножение через LEA.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление формулы V I K T O R I Y A Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 07.06.2009 13:28
Две задачи на ассемблере, вычисление выражений _°PROTOS°_ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 29.05.2009 22:51