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

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

       STACK  SEGMENT
              DB        1024 DUP(?)
       STACK  ENDS

        DATA  SEGMENT
           N  DB        ?
         MSG  DB        'please enter N(1~9): ',13,10,'$'
        DATA  ENDS

        CODE  SEGMENT
              ASSUME    CS:CODE, SS:STACK ,DS:DATA
      START:
              MOV       AX,DATA
              MOV       DS,AX
              MOV       AX, STACK   ; 初始化栈
              MOV       SS, AX
              MOV       SP, 1024


              MOV       AH,09
              LEA       DX,MSG
              INT       21H


              MOV       AH,01
              INT       21H
              MOV       N,AL


              MOV       DH,0H
              MOV       DL,N
              DEC       DL
              SUB       DX,30H


              MOV       AX,DX
              PUSH      AX
              CALL      YHSJ

              JMP       START

 

              MOV       AX, 4C00H
              INT       21H

 

 

; 输出杨辉三角的函数,接受一个栈上的参数N
; 输出N阶杨辉三角
       YHSJ:
              MOV       BP, SP
              MOV       AX, [BP+2]  ; 保存N到ax
              SHR       AX, 1       ; N = N / 2
              PUSH      AX
              MOV       AX, [BP+2]  ; 保存N到ax
              PUSH      AX
              CALL      C           ; C(N, N/2)获取最后一行中间的那个值,即最大值
              CALL      GETDIGIT    ; 计算该最大值的长度,如252则返回3
              MOV       CX, AX      ; 保存最大长度到cx,用于事后格式用
              XOR       DI, DI      ; 外层循环计数di,外层循环输出每一行
              JMP       CP1
        UP1:
              INC       DI          ; 更新di
        CP1:
              CMP       DI, [BP+2]  ; 测试循环条件,循环N次459

[1] [2] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有