Матрицы, ассемблер
Добавлено: 10 окт 2008, 11:49
Задание: Разработать подпрограмму (на ассемблере) суммирования двух матриц 8х8 и последующего умножения полученной суммы на число 13, т.е. С = (А + В) * 13. Элементы исходных матриц — 8-разрядные знаковые числа. Элементы результирующей матрицы — 16-разрядные знаковые числа. Суммирование элементов матриц произвести с учетом насыщения. За один цикл процедуры ММХ обрабатываются 2 строки матрицы. Вот то, что надумал я:
...
void MUL_M8x8(signed char *matrInA,signed char *matrInB,unsigned char multIn,signed short *matrOutC)
{
__asm
{
mov eax,matrInA
mov ebx,matrInB
mov edx,matrOutC
mov ecx,4
Loop1:
;Секция ММХ команд
movd mm5,multIn ;где-то
punpckldq mm5,mm5 ;здесь ошибка (в этих двух строчках)
movq mm0,[eax]
movq mm1,[eax]+8
movq mm2,[ebx]
movq mm3,[ebx]+8
paddsb mm0,mm2
paddsb mm1,mm3
pmullw mm0,mm6
pmullw mm1,mm6
movq [eax],mm0
movq [eax]+8,mm1
add eax,16
add ebx,16
loop Loop1
Emms ; закончить MMX состояние
Ret 0
}
}
Компилятор выдает ошибку, связанную с несоответствием типов. Проще говоря, требуется преобразовать данные типа unsigned char (multIn) в данные типа word или dword. Помогите бездарному студенту)).
...
void MUL_M8x8(signed char *matrInA,signed char *matrInB,unsigned char multIn,signed short *matrOutC)
{
__asm
{
mov eax,matrInA
mov ebx,matrInB
mov edx,matrOutC
mov ecx,4
Loop1:
;Секция ММХ команд
movd mm5,multIn ;где-то
punpckldq mm5,mm5 ;здесь ошибка (в этих двух строчках)
movq mm0,[eax]
movq mm1,[eax]+8
movq mm2,[ebx]
movq mm3,[ebx]+8
paddsb mm0,mm2
paddsb mm1,mm3
pmullw mm0,mm6
pmullw mm1,mm6
movq [eax],mm0
movq [eax]+8,mm1
add eax,16
add ebx,16
loop Loop1
Emms ; закончить MMX состояние
Ret 0
}
}
Компилятор выдает ошибку, связанную с несоответствием типов. Проще говоря, требуется преобразовать данные типа unsigned char (multIn) в данные типа word или dword. Помогите бездарному студенту)).