毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

打印杨辉三角汇编语言实现 第2页

更新时间:2009-6-21:  来源:毕业论文

              JG        DONE1
              MOV       AX, [BP+2]  ; 以下3句计算行前空格数 = (N-i)*cl,cl是最大长度
              SUB       AX, DI
              MUL       CL
              CALL      SHOWSPACE   ; 输出行前空格
              XOR       SI, SI      ; 内存循环计数si,内层循环输出一行中的每个数
              JMP       CP2
        UP2:
              INC       SI          ; 更新di
        CP2:
              CMP       SI, DI      ; 测试循环条件,循环di次
              JG        DONE2
              PUSH      SI
              PUSH      DI
              CALL      C           ; 获取该行的位于si位置的组合数,调用C(di, si)
              PUSH      AX          ; 保存该组合数
              CALL      SHOW        ; 输出该数
              MOV       AX, CX      ;┒以下3句输出数字间间隔空格,个数 = N - 1
              SUB       AX, 1       ;┃
              CALL      SHOWSPACE   ;┚
              POP       AX          ;┒
              CALL      GETDIGIT    ;┃获取该组合数长度
              MOV       BX, AX      ;┃
              MOV       AX, CX      ;┃
              SUB       AX, BX      ;┃计算需要填充的空格数 = 最大长度 - 该数长度 + 1
              ADD       AX, 1       ;┃本来应该先填充再输出数字间空格,顺序反过来是为了左对齐
              CALL      SHOWSPACE   ;┚以上打括号的2段反过来是正常的顺序
              JMP       UP2         ; 更新内层循环
      DONE2:                        ; 内层循环结束
              MOV       AH, 2       ; 以下5句实现换行
              MOV       DL, 13
              INT       21H
              MOV       DL, 10
              INT       21H
              JMP       UP1         ; 更新外层循环
      DONE1:                        ; 外层循环结束
              RET       2           ; 释放函数参数使用的栈空间

; 求组合数的递归函数,接受栈上的2个参数n, m(n > m)
; 返回C(n, m),即n选m的个数
; 算法是:
; { C(n, m) = 1 (n < m 或 m = 0)
; { C(n, m) = C(n-1, m-1) + C(n-1, m) (n > m)
; 即某位置组合数等于上一行左右两数之和
          C:
              PUSH      BP
              MOV       BP, SP
              SUB       SP, 2       ; 预留一个存储位置
              MOV       BX, [BP+6]  ; 保存m到bx
              CMP       BX, [BP+4]  ; 如果m > n 返回1
              JZ        L1
              CMP       BX, 0       ; 如果m = 0 返回1
              JZ        L1
              MOV       AX, [BP+4]  ; 保存n到ax
              DEC       AX          ; ax = ax - 1
              DEC       BX          ; bx = bx - 1
              PUSH      BX
              PUSH      AX
              CALL      C           ; 返回上一行左边的那个数
              MOV       [BP-2], AX  ; 保存左肩膀上的数
              MOV       AX, [BP+4]  ; 以下5句同理,返回上一行右肩膀上的数
              DEC       AX
              PUSH      [BP+6]
              PUSH      AX
              CALL      C
              ADD       AX, [BP-2]  ; 和左肩膀上的数相加得出该组合数
              JMP       L2
         L1:
              MOV       AX, 1
         L2:
              MOV       SP, BP
              POP       BP
              RET       4           ; ax返回组合数

; 递归以10进制输出ax
; 方法很简单,就是求出余数,然后ax = ax / 10
; ax = 0时退出,开始逆序输出求出的各位余数
       SHOW:
              MOV       BX, 10
              CMP       AX, 0
              JZ        OK1
              DIV       BL
              PUSH      AX
              AND       AX, 00FFH
              CALL      SHOW
              POP       DX
              MOV       DL, DH
              OR        DL, 30H
              MOV       AH, 2
              INT       21H
        OK1:
              RET

; 获取一个数的长度,ax为参数,如果ax = 252则返回3
; ax里是返回值
   GETDIGIT:
              MOV       BX, 10
              XOR       DX, DX
       NEXT:
              CMP       AX, 0
              JLE       OK2
              DIV       BL
              AND       AX, 0FFH
              INC       DX
              JMP       NEXT
        OK2:
              MOV       AX, DX
              RET

; 输出ax个空格,参数ax,无返回值
  SHOWSPACE:
              MOV       BX, AX
              MOV       AH, 2
              MOV       DL, ' '
      NEXTS:
              CMP       BX, 0
              JLE       DONES
              INT       21H
              DEC       BX
              JMP       NEXTS
      DONES:
              RET
        CODE  ENDS
              END       START459

上一页  [1] [2] 

打印杨辉三角汇编语言实现 第2页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。