作业帮 > 综合 > 作业

汇编 求M行N列的矩阵的每行及每列的元素之和

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/04 05:07:35
汇编 求M行N列的矩阵的每行及每列的元素之和
一个M行N列的矩阵,元素按行的顺序存于内存中
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:输出一个字符
; 入口:dl=要显示的字符
Enter_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Enter_Chr endp
; -----------------------------------------
; 功能:输出回车换行
Enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Enter_CTLF endp
; -----------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx
push bx
push ax
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide:xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop ax
pop bx
pop dx
ret
@@Temp_Save db 7 dup(?)
Dec_ASCII EndP
; -----------------------------------------
Arry db 11,12,13,14,15,16,17,18
N equ ($-Arry)/type Arry ;N列元素
db 21,22,23,24,25,26,27,28
db 31,32,33,34,35,36,37,38
db 41,42,43,44,45,46,47,48
db 51,52,53,54,55,56,57,58
db 61,62,63,64,65,66,67,68
M equ ($-Arry)/N ;M行元素
M_Elements dw M dup(0) ;每行元素之和
N_Elements dw N dup(0) ;每列元素之和
Start:push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
cld
lea si,Arry ;矩阵地址
lea bx,M_Elements ;每行元素之和保存地址
mov cx,M ;矩阵行数
Line:push cx ;入栈保存行数
mov cx,N ;矩阵列数
lea di,N_Elements ;每列元素之和保存地址
xor ah,ah
Column:lodsb ;读入一个元素
call Dec_ASCII ;显示这个元素值
mov dl,20h ;准备显示一个空格
call Enter_Chr ;显示一个字符
mov dl,'+' ;准备显示一个加号
cmp cx,1
ja $+4 ;当前元素不是本行最后一个,显示加号;否则,显示等号
mov dl,'=' ;准备显示一个等号
call Enter_Chr ;显示一个字符
mov dl,20h ;准备显示一个空格
call Enter_Chr ;显示一个字符
add [bx],ax ;累加每行元素
add [di],ax ;累加每列元素
inc di
inc di ;下一列元素之和保存地址
loop Column ;下一列
mov ax,[bx] ;取这行元素之和
call Dec_ASCII ;显示这行元素之和
call Enter_CTLF ;输出一个回车、换行
inc bx
inc bx ;下一行元素之和保存地址
pop cx ;出栈取出行数
loop Line ;下一行
call Enter_CTLF ;输出一个回车、换行
lea si,N_Elements ;每列元素之和保存地址
mov cx,N ;矩阵列数
Sum_Column:lodsw ;读入本列元素之和
call Dec_ASCII ;显示这列元素之和
cmp cx,1
jz $+7 ;当前列是最后一列,不显示逗号
mov dl,',' ;准备显示一个逗号
call Enter_Chr ;显示一个字符
mov dl,20h ;准备显示一个空格
call Enter_Chr ;显示一个字符
loop Sum_Column ;下一列元素之和
call Enter_CTLF ;输出一个回车、换行
Exit_Proc:mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束