Консультация № 189181
13.04.2016, 11:52
0.00 руб.
0 2 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Скоро курсовая я не знаю как че делать в ассемблере

Найти произведение матриц произвольного размера(должна проводиться проверка на возможность умножение(необез))

Прошу программу написать на начальном уровне,заранее спасибо(программу писать в TASM)

Обсуждение

давно
Посетитель
7438
7205
13.04.2016, 12:28
общий
Адресаты:
Курсовую-то надо было писать, начиная с осени, а не искать перед сдачей, кто бы сделал...
Как матрицы умножаются в математике Вы хоть знаете?
Как заполняем матрицы? Вводить с консоли, в теле программы, случайно, читать с файла, ...?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
15.04.2016, 16:25
общий
это ответ
Здравствуйте, radik!

Смотрите приложение:
[code lang=asm h=200]model small,pascal
;задаем размеры матриц
szRowA equ 4
szColA equ 3
szRowB equ szColA
szColB equ 5
szRowC equ szRowA
szColC equ szColB
.code
.186
start: mov ax,@data
mov ds,ax;адресуем сегменты
mov es,ax
;выводим обе матрицы
call outMatrix,offset A,szRowA,szColA
call outMatrix,offset B,szRowB,szColB
;начинаем умножение матриц
mov cx,szRowC;szRowA
xor si,si
xor bx,bx
;цикл по строкам матрицы С
@@01: push cx
mov cx,szColC;szColB
xor di,di
;цикл по столбцам матрицы С
@@02: call CalcMatrix;считаемм
;записываем значение
mov C[bx],ax
add bx,2;следующий элемент матрицы С
add di,2;сдедующий столбец матрицы В
loop @@02
pop cx
add si,2*szColA;следующая строка матрицы А
loop @@01
call outMatrix,offset C,szRowC,szColC
mov ah,4Ch
int 21h
;п/программа вывода матрицы
outMatrix proc x:word,y:word,z:word
uses ax,cx,di
mov di,x
mov cx,y
;цикл по строкам
om1: push cx
mov cx,z
;цикл по столбцам
om2: mov ax,[di];читаем число
call outNumber,ax,6;выводим
add di,2;следующий
loop om2
;переходим на другую строку экрана
mov al,10
int 29h
mov al,13
int 29h
pop cx
loop om1
;разделитель между матрицами
mov al,10
int 29h
mov al,13
int 29h
ret
outMatrix endp
;п/программа вывода одного числа с выравниваем
outNumber proc x:word,y:word
uses ax,cx,dx,si
mov si,10;система счисления
xor cx,cx;счетчик цифр
oN1: xor dx,dx
div si;получаем младший разряд
push dx;запоминаем его в стеке
inc cx;увеличиваем сетчик
or ax,ax;пока не ноль
jnz oN1
;разделяющие пробелы
mov ax,' '-'0'
oN2: push ax
inc cx
cmp cx,y
jb oN2
;извлекаем число со стека
oN3: pop ax
add al,'0';переводим в символ
int 29h;выводим
loop oN3
ret
outNumber endp
;п/программа подсчета одного элемента
CalcMatrix proc
uses bx,cx,dx,si,di
;считаем один элемент матрицы С
mov cx,szColA
xor bx,bx
@@03: mov ax,A[si];число матрицы А
xor dx,dx
mul B[di];умножаем на число из В
add si,2;к следующему столбцу
add di,2*szColB;к следующщей строке
add bx,ax;суммируем
loop @@03
mov ax,bx
ret
Calcmatrix endp
.data
dat = 1
A label word
rept szRowA
rept szColA
dw dat
dat = 1+dat mod 10
endm
endm
;dat = 1
B label word
rept szRowB
rept szColB
dw dat
dat = 1+dat mod 10
endm
endm
dwRow dw ?
C dw szRowC*szColC dup(?)
.stack 256
end start[/code]
Матрицы генерируются макросами.
ps:вопросы задавайте в мини-форуме.
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа