Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2010, 17:30   #1
xVxSeRGxVx
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 42
По умолчанию Умножение массивов Паскаль+АСМ

Найти скалярное произведение двух одномерных массивов
вот мой код на асме...
Моя идея работы программы: я передаю в асм два масива, умножаю елементы 1-й(с 1-го миссива) на 1-й(с 2-го миссива) и т.д.
и возвращаю число а в паскале просто зполняю массив... можно ли как-то сделать так, что-бы с функции возвращался массив скаляного произведения? ...
Код:
ideal
segment CODE byte public
    assume cs:CODE
    public multip2
    arr_ptr2 equ 4
    arr_ptr1 equ 8
    k1 dw ?
    k2 dw ?
    
    push bp
    push ds
    push cx
    push bx
    push dx
    xor dx, dx
    xor bx, bx

proc multip2 near
    push bp
    mov bp, sp


mov bx, OFFSET [bp+arr_ptr2] 
lds Di, DWORD [bp+arr_ptr2]    

mov cx, 5
PUSH DI
PUSH CX

M1:
    MOV AX, [BX]
    MOV DS:[DI], AX
    ADD DI, 2
    ADD BX, 2
LOOP M1

POP CX 
POP DI

lds SI, [bp+arr_ptr1]
CLD
@@adding:
    
    lodsw
    mov BX, DS:[DI]
    mul BX
    add di, 2
    
loop @@adding
    

    pop bp
    ret 4
endp multip2 

    pop dx
    pop bx
    pop cx
    pop ds
    
ends Code
end
код программы на паскале
Код:
{$L c:\tasm\bin\multipl.obJ}
Program labasrn_3;
uses crt;
Type
TMas1=array [1..5] of integer;
TMas2=array [1..5] of integer;
Var Mas1 , Mas2:TMas1;
MasRes:TMas2;
i,res : integer;
function multipl(Mas1 , Mas2:TMas1):integer;external;
Procedure Vvod ;
Begin
TextColor(Red);
Writeln;
TextColor(2);
Writeln('7 eleM Mac inp!');
TextColor(yellow) ;
For i:=1 to 5 do
Begin
Mas1[i]:=random(5);
Writeln('Mas1[',i,']=',Mas1[i]);
End;
For i:=1 to 5 do
Begin
TextColor(4);
Mas2[i]:= random(16);
Writeln('Mas2[',i,']=',Mas2[i]);
End;

Readln;
End;

BEGIN {Main}
ClrScr;
Vvod;
for i:=1 to 5 do
begin
MasRes[i] :=multipl(Mas1,Mas2);
TextColor(Blue);
Writeln('MasRes[',i,']=',MasRes[i]);
end;
Readln;
END.
xVxSeRGxVx вне форума Ответить с цитированием
Старый 17.02.2010, 18:39   #2
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

помню с Паскаля что массив с функций и процедур возратить трудно, так как нужно процедуру(функцию) прописывать в цикл и изменять постоянно индех....дабы назначать каждои переменной свой порядковый номер....
Doholyan вне форума Ответить с цитированием
Старый 17.02.2010, 19:08   #3
xVxSeRGxVx
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Doholyan Посмотреть сообщение
помню с Паскаля что массив с функций и процедур возратить трудно, так как нужно процедуру(функцию) прописывать в цикл и изменять постоянно индех....дабы назначать каждои переменной свой порядковый номер....
потому я и возвращаю из функции с АСМ-а число а в Паскале просто в цикле беру его и записую в массив
xVxSeRGxVx вне форума Ответить с цитированием
Старый 17.02.2010, 19:11   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

xVxSeRGxVx, скалярное произведение - это ЧИСЛО (НЕ МАССИВ), равное СУММЕ произведений соответствующих элементов
p51x на форуме Ответить с цитированием
Старый 17.02.2010, 19:18   #5
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

Так ты хочеш прописать это в Асме...или не пойму твою проблемму...
Doholyan вне форума Ответить с цитированием
Старый 17.02.2010, 19:53   #6
xVxSeRGxVx
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
xVxSeRGxVx, скалярное произведение - это ЧИСЛО (НЕ МАССИВ), равное СУММЕ произведений соответствующих элементов
да я знаю, но препод мне сказал, что это произведение елементов с одинаковыми индексами )))
xVxSeRGxVx вне форума Ответить с цитированием
Старый 17.02.2010, 19:57   #7
xVxSeRGxVx
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Doholyan Посмотреть сообщение
Так ты хочеш прописать это в Асме...или не пойму твою проблемму...
я не знаю как одновремонно умножать елементы с 2-х массивов...
то есть... указатель на 1-й массив будет в SI (или єто смещение по массиву), точно не знаю, а второй куда запихнуть я не знаю, думал в DI ...
проблема в том, что я не знаю как с двумя массивами работать
xVxSeRGxVx вне форума Ответить с цитированием
Старый 17.02.2010, 20:08   #8
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

в паскале конечно будет проще...в низком уровне(асм) сложней двумя строчками не отделаешься дерзай в паскале...там проще если это не принципиально важно
Doholyan вне форума Ответить с цитированием
Старый 17.02.2010, 20:30   #9
xVxSeRGxVx
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от Doholyan Посмотреть сообщение
в паскале конечно будет проще...в низком уровне(асм) сложней двумя строчками не отделаешься дерзай в паскале...там проще если это не принципиально важно
да в паскале там и проще простого сделать, а нада, что-бы в функцию передавались указатели на массивы
xVxSeRGxVx вне форума Ответить с цитированием
Старый 17.02.2010, 20:59   #10
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

Так понимаю что указатель тебе нужно прописать именно асмом?!
Разбираясь в твоем коде...сделал вывод он у тебя вообще не рабочий, такое ощущения набор слов!
Не пишут так программы....Учись далать от простогно к сложному....
В Паскале вообще многие процедуры описаны не правильно и вообще все как то не обдуманно а заново программу писать в бок!

Последний раз редактировалось Doholyan; 17.02.2010 в 21:07.
Doholyan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль.Обработка двумерных массивов. popozoglo Помощь студентам 2 12.02.2010 01:33
Паскаль.Обработка одномерных массивов. popozoglo Помощь студентам 2 11.02.2010 22:49
Паскаль: Операции с элементами массивов. iolopukki Помощь студентам 1 23.06.2009 19:54
Паскаль,формирование массивов. Amenus Помощь студентам 4 10.03.2009 20:33
Паскаль. Помогиет с умножением массивов set Помощь студентам 2 20.11.2007 14:49