8086汇编实现手动输入两个矩阵的行列后输入矩阵数值后相乘
时间: 2023-11-26 13:03:26 浏览: 102
下面是一个简单的8086汇编程序,可以实现手动输入两个矩阵的行列数,然后手动输入矩阵的值,并相乘输出结果。
```
; 8086汇编程序,实现矩阵相乘
.model small
.stack 100h
.data
m1 db ?
n1 db ?
m2 db ?
n2 db ?
msg1 db 'Enter the size of matrix 1 (m n): $'
msg2 db 'Enter the size of matrix 2 (m n): $'
msg3 db 'Enter the elements of matrix 1: $'
msg4 db 'Enter the elements of matrix 2: $'
msg5 db 'Result: $'
mat1 db 100 dup(0)
mat2 db 100 dup(0)
res db 100 dup(0)
.code
main proc
mov ax, @data
mov ds, ax
; 输入矩阵1的行列数
mov ah, 09h
lea dx, msg1
int 21h
mov ah, 01h
int 21h
sub al, 30h
mov m1, al
mov ah, 01h
int 21h
sub al, 30h
mov n1, al
; 输入矩阵2的行列数
mov ah, 09h
lea dx, msg2
int 21h
mov ah, 01h
int 21h
sub al, 30h
mov m2, al
mov ah, 01h
int 21h
sub al, 30h
mov n2, al
; 输入矩阵1的元素
mov ah, 09h
lea dx, msg3
int 21h
mov bx, 0
mov cx, m1
mul cx
mov cx, n1
mul cx
mov cx, ax
mov ah, 01h
mov si, offset mat1
input1:
int 21h
sub al, 30h
mov [si], al
inc si
inc bx
cmp bx, cx
jne input1
; 输入矩阵2的元素
mov ah, 09h
lea dx, msg4
int 21h
mov bx, 0
mov cx, m2
mul cx
mov cx, n2
mul cx
mov cx, ax
mov ah, 01h
mov si, offset mat2
input2:
int 21h
sub al, 30h
mov [si], al
inc si
inc bx
cmp bx, cx
jne input2
; 计算矩阵相乘
mov ah, 09h
lea dx, msg5
int 21h
mov bx, 0
mov cx, m1
mul cx
mov cx, n2
mul cx
mov cx, ax
mov ah, 01h
mov si, offset res
xor ax, ax
mov bx, 0
calc:
mov dx, 0
mov di, bx
mov cx, n1
mul cx
add di, ax
mov al, 0
mov cl, n1
mov bl, n2
mul bl
add si, ax
mov cx, n1
xor ax, ax
mul cx
add si, ax
mov cx, n1
inner:
mov al, [mat1+bx]
mov bl, [mat2+di]
mul bl
add [res+bx], al
inc bx
inc di
loop inner
cmp bx, cx
jne calc
; 输出结果
mov bx, 0
mov cx, m1
mov dx, n2
mov ah, 02h
mov si, offset res
output:
mov al, [si]
add al, 30h
int 21h
inc si
inc bx
cmp bx, dx
jne output
add si, (cx-1)*dx
mov ah, 0ah
mov dx, offset msg5
int 21h
mov ah, 4ch
int 21h
main endp
end main
```
这个程序使用了一些8086汇编的基本指令,如`mov`,`add`,`sub`,`mul`,`cmp`,`jne`,等等。程序分为几个部分:
- 输入矩阵1的行列数和元素
- 输入矩阵2的行列数和元素
- 计算矩阵相乘
- 输出结果
输入部分使用了`int 21h`中断来实现,输出部分使用了`int 21h`中断和显示字符串的方式来实现。
计算矩阵相乘的部分需要使用三层循环,分别计算矩阵1和矩阵2的每一个元素的乘积,并把结果累加到相应的位置上。
注意到这个程序中,矩阵的元素都是以字符的形式输入和输出的,需要在程序中进行转换。此外,这个程序没有对输入的数据进行错误检查和处理,如果输入的数据不符合要求,程序可能会出错。
阅读全文