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.
Ассемблер в паскале
Нужно сформировать вектор из сумм элементов каждой строки и сортировать эти элементы в столбик по убыванию. Не имею представления как это сделать.Уже колдовал и так и сяк делал помогите пожалуйста кто знает.
Код:
Вы когда матрицы умножали получали новую матрицу? А вектор? Так в чем же проблема?
Ибо не как не въеду что к чему прибавлять надо.
Код:
mov al,byte ptr matrP[bx]
add al,byte ptr matrP[si]
mov byte ptr masssum[si],al
add al,byte ptr matrP[si]
mov byte ptr masssum[si],al
Например складываю матрицу со значениями
1 8 получается 13 20 то есть на 21 нет перехода
12 21
Вы прямо внутрь матрицы строки складываете?
ну да...а если не внутри складывать то почему то одни нули показывает
Мне просто некогда разбираться где у вас тот кусок кода который отвечает за последнее задание. А почему вы сумму элементов строки не аккумулируете? И где цикл по элементам строки?
Код:
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
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
Вот больше нет никаких соображений у меня имеются оба задания на паскале только не знаю как на ассемблер переделать всё не получается.
Цитата: Sys*.12
у меня имеются оба задания на паскале
Скомпиль, дизассемблируй.
это как поподробней пожалуйста?
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
Последнее больше похоже на правду хотя и не ясно насколько верно. Итак, что же за ошибка?