;---------------------------------
;matrix.asm
;---------------------------------
;AUTHOR:
;DATE:2007/11/21
;---------------------------------
;FUNCTION:实现两个三阶方阵的加法和减法运算
;
;--------------------------------
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
matrix1 db 1,2,3,3,2,1,1,2,3,7 dup(?)
matrix2 db 1,2,3,3,2,1,1,2,3,7 dup(?)
result1 db 16 dup(?)
result2 db 16 dup(?)
datasg ends
stacksg segment
stack db 9 dup(?)
stacksg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov bx,0
mov cx,9
s0: mov al,matrix1[bx];输出第一个三阶方阵的元素
add al,48
mov dl,al
mov ah,02h
int 21h
mov dl,32 ;输出一个空格
mov ah,02h
int 21h
inc bx
loop s0
mov dl,0ah ;光标转到当前列的下一行
mov ah,02h
int 21h
mov dl,0dh ;光标返回当前行的第一列,和上面的换行,加起来效果等于回车
mov ah,02h
int 21h
mov bx,0
mov cx,9
s1: mov al,matrix2[bx] ;和上面类似
add al,48
mov dl,al
mov ah,02h
int 21h
mov dl,32
mov ah,02h
int 21h
inc bx
loop s1
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
mov bx,0
mov cx,9
s2: mov al,matrix1[bx] ;求两个三阶方阵的和
add al,matrix2[bx]
mov result1[bx],al
inc bx
loop s2
mov bx,0
mov cx,9
s3: mov al,matrix1[bx] ;求两个三阶方阵的差
sub al,matrix2[bx]
mov result2[bx],al
inc bx
loop s3
mov bx,0
mov cx,9
s4: mov al,result1[bx] ;输出和,其它基本和上面输出方阵元素相同
add al,48
mov dl,al
mov ah,02h
int 21h
mov dl,32
mov ah,02h
int 21h
inc bx
loop s4
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
mov bx,0
mov cx,9
s5: mov al,result2[bx] ;输出差,其它基本和上面输出方阵元素的操作相同
add al,48
mov dl,al
mov ah,02h
int 21h
mov dl,32
mov ah,02h
int 21h
inc bx
loop s5
mov dl,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
mov ax,4c00h
int 21h
codesg ends
end start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;总结:经过实战编写上面的程序,我积累了以下经验。
;1。更加体会到循环的使用方法
;2。更加深入的了解了数组的定义和使用
;3。初步得懂了矩阵的加法和减法运算的实现
;4。了解到在输出一个数字到屏幕前须先将它转换为相应的数字字符输出
;5。未来需要实现16位的矩阵的加法和减法的运算
;6。未来需要实现8位或者16位的矩阵的乘法和逆的算法
;7。懂得了输出0ah为光标跳转到下一行
;8。懂得了输出0dh为光标回到第一列
;9。需要加强分支语句实现的练习
;10。未来需要实现矩阵的转置的运算,这个运算目前对我来说一点也不难
;11。希望能实现任意矩阵的运算
;12。也许可以用更少的循环来实现会使程序变得更简洁点,不过这得用到一些比较判断指令,我还没学过这些指令。
; 原来我只是想练习一下数组和循环的使用,可我没想到会在编写的过程中遇到那么多的意想不到的问题,不过这也让我更加体
; 会到了自己的知识是多么的有限,自己是多么的无知。因此想进步就得更加努力的学习,继续加油吧。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;时间:2007/11/21 星期三 23:04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
输出结果:
1 2 3 3 2 1 1 2 3
1 2 3 3 2 1 1 2 3
2 4 6 6 4 2 2 4 6
0 0 0 0 0 0 0 0 0
注:以上为四个三阶方阵,前两个方阵为左右操作数,第三个方阵为前两个方阵的和,第四个方阵为前两个方阵的差。严格来说这不是一个通用求两个三阶方阵的算法,更不是一个求任意矩阵的运算的算法。写这个程序只是为了练习练习数组和循环的使用而已。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法