首页
社区
课程
招聘
[原创]实现两个三阶方阵的加法和减法运算
发表于: 2007-11-21 23:24 5447

[原创]实现两个三阶方阵的加法和减法运算

2007-11-21 23:24
5447
;---------------------------------
;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虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
2
有个建议:
由于楼主目前的大部分作品都是比较基础的语法练习型为主,
因而我没办法给你加精华
我希望在这个阶段,你把所有作品都标上“[实验n]”的字样,
或者你自己集成到那个实验专贴里
等你这个阶段学习结束,我会把你的所有实验打包成CHM,作为汇编入门教程。
虽然精华数量只有1,但我想这样更有意义。
你觉得呢?
2007-11-22 13:32
0
雪    币: 486
活跃值: (13)
能力值: ( LV9,RANK:430 )
在线值:
发帖
回帖
粉丝
3
同意。有同感。
2007-11-22 21:34
0
游客
登录 | 注册 方可回帖
返回
//