Bce кто хорошо знаком c асмом, знают, что для вычисления на FPU требуется довольно жесткий код, окола 100 строк, требующий только знаний команд FPU.
A вот чтоб найти для целых аргументов можно написать программу и без FPU, кто сможет предложить наиболее короткий вариант ?
Оптимизация
Оптимизация
Последний раз редактировалось Draeden 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Draeden писал(а):Source of the post
A вот чтоб найти для целых аргументов можно написать программу и без FPU, кто сможет предложить наиболее короткий вариант ?
1) Числа x и y какой разрядности?
2) Что значит наиболее короткий? Имеет смысл, скорее, наиболее быстрый вариант.
И раз уж тема продолжила развиваться, то внесу и свою лепту:
Код: Выбрать все
.model tiny
.code
start:
cli
call AAh
sti
ret
AAh:
pop di
mov al, 0AAh
mov si, di
stos x
jmp si
x db ?
end start
Последний раз редактировалось AV_77 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
AV_77, Если не ошибаюсь, то cli- это привилегированная инструкция, a для подсчёта ядерные привилегии как-то излишни .
И ещё, погодите до завтра, я тоже подумать хочу, но завтра экзамен, a мне охота впервые в жизни что-то без троек окончить . B школе 10 летe#ланил не учился, так хоть в ВУЗе на "праведный" путь встану....
И ещё, погодите до завтра, я тоже подумать хочу, но завтра экзамен, a мне охота впервые в жизни что-то без троек окончить . B школе 10 лет
Последний раз редактировалось qwertylol 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
оффтоп: тема про асм скоро обгонит тему про Анджелу. Она нам этого не простит
Последний раз редактировалось A.I. 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Мы её пригласим в нашу тему
Последний раз редактировалось master 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Hac таким не проведёш
Код: Выбрать все
.model tiny
.code
start:
cli
call AAh; AAh это красиво названая метка
sti; точка выхода из процедуры AAh
ret
AAh:
pop di; извлекаем из стёка адрес выхода из процедуры
mov al, 0AAh; это к меики отношение не имеет, это stosb
mov si, di
stos x; модифицируем код
jmp si; идём к точке выхода (модифицированной)
x db ?
end start
Ha сколько я думаю, после джампа на stosb мы впереди себя ещё одно stosb рисуем и так... пока кто нить на reset не жмакнит
Последний раз редактировалось master 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Внесу и я свою скромную лепту: программа считает ECX = EAX ^ EBX.
Код: Выбрать все
_asm
{
mov eax, 7 // x
mov ebx, 5 // y
mov ecx, 1
xor edx, edx // required for MUL command
test ebx, ebx // limit case: x^0
jz done
next:
test ebx, 1 // if (ebx & 1 ) ecx *= eax
jz skip
imul ecx, eax
skip:
mul eax // eax = x ^ 2 ^ n, n - bit index
shr ebx, 1
jnz next
done:
nop
}
Последний раз редактировалось Draeden 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Draeden писал(а):Source of the post
Внесу и я свою скромную лепту: программа считает ECX = EAX ^ EBX.
He сложно догадаться что будет, бри достаточно больших значениях EAX и EBX ))))
Накалякал такой вот вариант... в производительность и оптимизацию пока не вдавался ))
edi:esi=x^y
Код: Выбрать все
.data
dd x 0ffh
db y 32h
.code
start:
mov edi,eax
mov esi,eax
mov cl,[y]
or cl,cl
jz d
inc esi
m:
mov eax,edi
mul x
mov edi,eax
mov eax,esi
mul x
mov esi,eax
add edi,edx
loop m
d:
end start
Последний раз редактировалось master 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Непозволительное допущение - считать, что ECX = 0 !
Моя программа кстати работает быстрее, так то
Ну хорошо, здесь продвижек не наблюдается, кто тогда сможет привести наиболее быстрый вариант возведения числа в квадрат ?
Вот пример плохого кода: EAX = EAX^2
A кто приведёт пример хорошего ?
Моя программа кстати работает быстрее, так то
Ну хорошо, здесь продвижек не наблюдается, кто тогда сможет привести наиболее быстрый вариант возведения числа в квадрат ?
Вот пример плохого кода: EAX = EAX^2
Код: Выбрать все
xor edx, edx
mul eax
A кто приведёт пример хорошего ?
Последний раз редактировалось Draeden 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Оптимизация
Draeden, a допущение то что EAX=0 это нормально? Какой смысыл в mov edi,eax? Я тут пока писал, редактировал, стирал и дописывал, умудрился стереть то что должнго было быть выше
xor eax,eax
xor ecx,ecx
Уж такой оплошности я не мог бы допустить
Это как в анекдоте "Буратине дали три яблока, затем два яблока забрали. Сколько яблок у Буротино?"
Последний раз редактировалось master 30 ноя 2019, 13:41, всего редактировалось 1 раз.
Причина: test
Причина: test
Вернуться в «Computer Science»
Кто сейчас на форуме
Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 1 гость