Сборник по задачам и примерам Assembler


       

Умножение матрицы 4x4 на четырехмерный вектор (стандартный сопроцессор)



Умножение матрицы 4x4 на четырехмерный вектор (стандартный сопроцессор)

Подпрограмма состоит из двух частей. В первой части вычисляется собственно произведение четырехмерной матрицы на четырехмерный вектор. Во второй части полученный четырехмерный вектор преобразуется влрехмерный путем деления его компонентов на его четвертую координату.

:prgl0_05.asm - программа поворота изображения на месте :с использованием средств стандартного сопроцессора.

t :

:координаты квадрата (необходимо инициализировать) xO.yO.xl.yl.x2.y2.x3.y3 mas_xy dd 8 dup (0.0)

a dd 0.0 :угсл (необходимо инициализировать) .code

lea si.mas_xy

mov ex.4 :цикл 4 раза - по количеству вершин

firm ;вычисляем sin а и cos a;

fid a ;включаем а стек угол

fsin вычисляем sin a

fxch ;меняеи st(0)<->st(l)

fcos ;вычисляем cos a

fxch ;меняем st(0)<->st(l)

fstp a :выталкиваем а :поворот изображения cycl: fild word ptr [si] :включить в стек координату х элемента

fild word ptr [si+2] :включить в стек координату у элемента

fid St(l) ;дублируем их

fid st(l)

fmul st.st(5) вычислить y*sin

fxch :меняем st(0)<->st(l)

fmul St.st(4) вычислить x'cos

fadd :новая координата х

fistp word ptr[si] :передать новую координату х в память

fmul st.st(2) вычислить y*cos

fxch ' ;меняем st(0)<->st(l)

fmul St.StO) .-вычислить x*sin

fsubr .новая координата у

fistp word ptr[si*4] ;передать ее в память

add si.8 ;продвинуть указатель массива mas_xy

loop cycl повторить еще 3 раза :в mas_.ху преобразованные для поворота координаты квадрата

Поворот изображения (ХММ-расширение)

:prgl0_06.asm - программа поворота изображения на месте

:с использованием средств ХММ-расширения.

.data

:ALIGN 16

:координаты квадрата (необходимо инициализировать) хО,уО,х1.у1.х2.у2.х3.уЗ

mas_xy dd 8 dup (0.0)

a dd 0.0 :угол (необходимо инициализировать)

sin_a dd 0.0

cos_a dd 0.0

null dd 0.0

. code

:.........

lea esi.raas_xy

mov ecx.4 :цикл 4 раза - no количеству вершин

finit вычисляем sin а и cos a;

fid a :включаем в стек угол



Содержание  Назад  Вперед