Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [macro] Поэлементное умножение двух массивов, Макрос для поэлементного умножения 
V
    Опции темы
Vandalko
Дата 11.5.2009, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



Наверное, плохо искал, но нашел очень мало на тему создания собственных макросредств  в ассемблере.
Суть задачи - написать макро, чтобы можно было умножать поэлементно 2 массива, эти массивы могут быть из байт, слов, двойных слов. Умножение должно выполняться либо знаковое, либо беззнаковое.
Скажем так, с умножением байтовых массивов проблем нет, но как в третий результирующий массив записывать результат умножения каждой пары элементов из массивов слов или двойных слов ? (некоторое представление у меня даже об этом есть, но хотелось бы проверить его правильность и уточнить некоторые моменты smile )
Но вот главная проблема - знаковое или беззнаковое умножение.
Читал, что можно используя & подставлять значения переменных по типу: 
Код

"Вывод &message"
 или 
Код

var_a_&type d&type 10 dup (?) 
.    
Но как это применить когда нужно в зависимости от условия использовать mul или imul ? Или все же будет проще воспользоваться простым переходом по условию ? smile 

Это сообщение отредактировал(а) Vandalko - 11.5.2009, 01:16
PM MAIL WWW ICQ   Вверх
Vandalko
Дата 25.5.2009, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



Програма написана, но есть ошибки...

Код
.386
mmul macro m1,m2,dest,len,znak,o_type
local bmul,wmul,dmul,bznak,wznak,dznak
push ebx
push eax
push edx
push esi
push cx
xor eax,eax
xor edx,edx
xor esi,esi
xor ebx,ebx
mov cx,len
mov bx,znak
mov al,o_type
mov esi,0
cmp al,'b'
je bmul
cmp al,'w'
je wmul
cmp al,'d'
je dmul
bmul:mov al,m1[esi]
cmp bx,'1'
je bznak
mul m2[esi]
bznak:imul m2[esi]
mov dest[2*esi],ax
inc esi
loop bmul
jmp mend 
wmul:mov ax,word ptr m1[2*esi]
cmp bx,'1'
je wznak
mul word ptr m2[2*esi]
wznak:imul word ptr m2[2*esi]
mov dest[4*esi],dx:ax
inc esi
loop wmul
jmp mend 
dmul:mov eax,dword ptr m1[4*esi]
cmp bx,'1'
je dznak
mul dword ptr m2[4*esi]
dznak:imul dword ptr m2[4*esi]
mov dest[8*esi],edx:eax
inc esi
loop dmul
mend:pop ebx
pop eax
pop edx
pop esi
pop cx
endm

data_init macro
mov ax,data
mov ds,ax
xor ax,ax
endm

exit macro
mov ax,4c00h
int 21h
endm

assume CS:CODE, DS:DATA, SS:STACK
DATA segment use16
lngth equ 5
mas_a db -1,8,3,2,-5
mas_b db 1,2,-3,4,5
mas_c dw lngth dup (0)
DATA ends

STACK segment
db 256 dup("?")
STACK ends

CODE segment use16
run:
data_init
mmul mas_a,mas_b,mas_c,lngth,'0','b'
exit
CODE ends
end run



Ошибки:
Цитата
 Assembling: \masm32\my\lab7\lab.asm
\masm32\my\lab7\lab.asm(82) : error A2032: invalid use of register
 mmul(35): Macro Called From
  \masm32\my\lab7\lab.asm(82): Main Line Code
\masm32\my\lab7\lab.asm(82) : error A2032: invalid use of register
 mmul(44): Macro Called From
  \masm32\my\lab7\lab.asm(82): Main Line Code
_


Помогите исправить  smile 

Это сообщение отредактировал(а) Vandalko - 25.5.2009, 21:13
PM MAIL WWW ICQ   Вверх
airyashov
Дата 26.5.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



может отстал от masm'a но такую запись вижу первый раз

mov dest[4*esi],dx:ax
mov dest[8*esi],edx:eax


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0391 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.