Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ассемблер в паскале

76K
01 декабря 2011 года
Sys*.12
7 / / 01.12.2011
Всем добрый день.На занятиях дали задание через паскаль на ассемблере выполнить 2 задания одно на слож\дел\умнож матриц я его выполнил а второе с получившейся матрицей P:
Нужно сформировать вектор из сумм элементов каждой строки и сортировать эти элементы в столбик по убыванию. Не имею представления как это сделать.Уже колдовал и так и сяк делал помогите пожалуйста кто знает.
Код:
program kursach;
const
 maxn=10;
var
 matrA,matrB,matrC,massSum:array[1..maxn,1..maxn] of shortint;
 matrP,tempmatrP:array[1..maxn,1..maxn] of shortint;
 i,j,k,n,m,p,f,r:integer;
 s:shortint;
 baseA,baseB,baseC,baseP,baseX:integer;
begin
 write('Vvedite kolichestvo strok matrici A:');
 readln(n);
 write('Vvedite kolichestvo stolbcov matrici A:');
 readln (m);
 writeln('Vvedite elementi matrici A:');
 for i:=1 to n do
  for j:=1 to  m do
   begin
   write('matrA[',j,',',i,']=');
   readln(matrA[j,i]);
 end;

begin
 write('Vvedite kolichestvo strok matrici B:');
 readln(m);
 write('Vvedite kolichestvo stolbcov matrici B:');
 readln(p);
 writeln('Vvedite elementi matrici B:');
 for i:=1 to m do
  for j:=1 to p do
   begin
   write('matrB[',i,',',j,']=');
   readln(matrB[i,j]);
 end;
 begin
 write('Vvedite kolichestvo strok matrici C:');
 readln(m);
 write('Vvedite kolichestvo stolbcov matrici C:');
 readln(p);
 writeln('Vvedite elementi matrici C:');
 for i:=1 to m do
  for j:=1 to p do
   begin
   write('matrC[',i,',',j,']=');
   readln(matrC[i,j]);
 end;
 END;

asm
mov i,0
mov baseC,0
@@cicls:

mov j,0
@@ciclr:

mov f,0
mov bx,j
mov si,baseC
mov al,byte ptr matrA[bx+si]

inc j
add baseC,maxn
mov ax,n
cmp j,ax
jl @@ciclr

inc i
mov ax,m
cmp i,ax
jl @@cicls

mov i,0
mov baseP,0
@@cicli:

mov j,0
@@ciclj:

mov s,0
mov dl,2
mov bx,baseP
mov si,j
mov al,byte ptr matrB[bx+si]
mov ah,0
imul byte ptr matrB[bx+si]
div dl
add al,byte ptr matrA[bx+si]
sub al,byte ptr matrC[bx+si]

add s,al
add al,byte ptr matrB[bx+si]

mov bx,baseP
mov si,j
mov al,s
mov byte ptr matrP[bx+si],al


mov al,s
mov bx,baseP
mov si,j
mov byte ptr matrP[bx+si],al
mov byte ptr masssum[bx],al
add s,al

inc j
mov ax,p
cmp j,ax
jl @@ciclj

inc i
add baseP,maxn
mov ax, m
cmp i,ax
jl @@cicli

inc j
add baseC,maxn
mov ax,n
cmp j,ax
jl @@ciclr



end;

writeln('ASM result Matrica (A^T+B^2\2)-C:');
for i:=1 to  m do
 begin
 for j:=1 to p do
  write(matrP[i,j],' ');
  writeln;
 end;
writeln('ASM result Matrica A^T:');
 for i:=1 to m do
 begin
 for j:=1 to n do
  write( matrA[i,j],' ');
  writeln;
 end;

writeln('ASM result Matrica Summ:');
for i:=1 to m do
 begin
 for j:=1 to p do
  write( massSum[i,j],' ');
  writeln;
 end;

end;
end.
14
01 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
Вы когда матрицы умножали получали новую матрицу? А вектор? Так в чем же проблема?
76K
02 декабря 2011 года
Sys*.12
7 / / 01.12.2011
Матрицу получал это матрица P.А вектор я не знаю как получить.как получаеться выполнить сумму строк матрицы ?
Ибо не как не въеду что к чему прибавлять надо.
76K
02 декабря 2011 года
Sys*.12
7 / / 01.12.2011
Попробовал сложить строки но почему то нет перехода на следующий элемент:
 
Код:
mov al,byte ptr matrP[bx]
add al,byte ptr matrP[si]
mov byte ptr masssum[si],al

Например складываю матрицу со значениями
1 8 получается 13 20 то есть на 21 нет перехода
12 21
14
03 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
Вы прямо внутрь матрицы строки складываете?
76K
04 декабря 2011 года
Sys*.12
7 / / 01.12.2011
ну да...а если не внутри складывать то почему то одни нули показывает
14
04 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
Мне просто некогда разбираться где у вас тот кусок кода который отвечает за последнее задание. А почему вы сумму элементов строки не аккумулируете? И где цикл по элементам строки?
76K
07 декабря 2011 года
Sys*.12
7 / / 01.12.2011
 
Код:
mov s,0
mov s,al
@@ciclo:
mov al,byte ptr matrP[bx]
add al,byte ptr matrP[si]
inc bx
loop @@ciclo

mov byte ptr masssum[si],al

Вот больше нет никаких соображений у меня имеются оба задания на паскале только не знаю как на ассемблер переделать всё не получается.
10
07 декабря 2011 года
Freeman
3.2K / / 06.03.2004
Цитата: Sys*.12
у меня имеются оба задания на паскале


Скомпиль, дизассемблируй.

76K
07 декабря 2011 года
Sys*.12
7 / / 01.12.2011
это как поподробней пожалуйста?
76K
07 декабря 2011 года
Sys*.12
7 / / 01.12.2011
Попробовал вот так вот но на последней строчке ошибку выдаёт
mov bx,0
mov cx,p
mov si,0
mov ah,0

@@cicla1:
mov s,al
mov al,byte[P+bx]
add si,ax
add bx,i
loop @@cicla1
mov s,si
14
07 декабря 2011 года
Phodopus
3.3K / / 19.06.2008
Последнее больше похоже на правду хотя и не ясно насколько верно. Итак, что же за ошибка?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог