Страница 1 из 1

Матрицы, ассемблер

Добавлено: 10 окт 2008, 11:49
Amarilla
Задание: Разработать подпрограмму (на ассемблере) суммирования двух матриц 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. Помогите бездарному студенту)).

Re: Требуется помощь знающего человека

Добавлено: 10 окт 2008, 18:12
somewhere
Во-первых, multIn объявлен как unsigned char, т.е. 1 байт. Т.е. такая инструкция недопустима

Код: Выделить всё

movd mm5, multIn
В вашем случае можно сделать так

Код: Выделить всё

movzx eax, multIn
movd mm5, eax
А вот между прочим существуют еще специально заточенные регистры esi, edi - для адресов источника и назначения, и использование регистров общего назначения в качестве косвенной адрессации без необходимости считается дурным тоном. Хотелось бы посмотреть на удивленные лица нынешних студентов, почему нельзя писать так

Код: Выделить всё

mov bx, [ax]
Но это так, отступление... Во-вторых
&quot писал(а):pmullw mm0,mm6
pmullw mm1,mm6
подразумевается скорее всего mm5, потому что mm6 не проинициализирован... в сам код особо не вникал, просто то что бросилось в глаза

Re: Требуется помощь знающего человека

Добавлено: 10 окт 2008, 19:40
Amarilla
Спасибо за понимание и за помощь.