Консультация # 189181: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Скоро курсовая я не знаю как че делать в ассемблере Найти произведение матриц произвольного размера(должна проводиться проверка на возможность умножение(необез)) Прошу программу написать на начальном уровне,заранее спасибо(программу писать в TASM)...
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
Матрицы генерируются макросами. ps:вопросы задавайте в мини-форуме. Удачи!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!