杨氏三角 汇编 16位

题目:
输出杨氏三角

INCLUDE  MACRO.LIB
OUTARRY    MACRO  ARRY  ;输出数组
    PUSH     DI
    PUSH     CX 
    PUSH    AX
    PUSH    DX
    PUSH    BX
    PUSH    SI

        MOV  SI,CX
        XOR DI,DI
        XOR CX,CX
        MOV BX,10
;循环,访问ARRY[DI]内容
OUTPUT:
        XOR DX,DX
        MOV AX,ARRY[DI]
;输出ARRY[DI]内容
ROTATE: 
        DIV BX;     
        ADD DX,30H
        INC CX
        PUSH DX
        XOR DX,DX
        CMP AX,0 ;商是否为零     
        JNZ ROTATE
        MOV AH, 2   

PRINT:      
        POP DX    ;数字
        INT 21H
        DEC CX
        CMP CX,0
        JNZ PRINT
        MOV DL, 0 ;空格
        INT 21H     
        ADD DI,2
        CMP DI,SI
        JNG OUTPUT

        MOV AH, 2   
        MOV DL, 0DH
        INT 21H
        MOV DL, 0AH
        INT 21H 
    POP SI
    POP BX
    POP DX
    POP AX
    POP CX
    POP DI
ENDM

CALCULATE MACRO ARRY1,ARRY2 又ARRY1计算出ARRY2的数组内容
        XOR BX,BX;
LOP2:   
        CMP BX,0
        JE  JUDGE1
        CMP BX,CX
        JE  JUDGE1

        JMP JUDGE2  
JUDGE1:         ;ARRY2的第一个数和最后一个数均为1
        MOV AX,1
        MOV ARRY2[BX],AX
        JMP JUDGELOP2
JUDGE2:     ;ARRY2[I] = ARRY1[I] + ARRY1[I+1]
        MOV AX,ARRY1[BX-2]
        ADD AX,ARRY1[BX]
        MOV ARRY2[BX],AX
JUDGELOP2:
        ADD BX,2
        CMP BX,CX
        JNG LOP2
ENDM    

COPYARRY MACRO ARRY1,ARRY2 ;将ARRY2的内容复制到ARRY1中
    PUSH CX
        MOV AX,CX
        DIV DIVED
        INC AX
        MOV CX,AX

        MOV AX,SEG ARRY1      
        MOV ES,AX
        MOV DI,OFFSET ARRY1
        MOV SI,OFFSET ARRY2     
        CLD
        REP MOVSW   
    POP CX
ENDM    

STACKSG     SEGMENT   STACK  'S'
            DW 64 DUP('ST')
STACKSG     ENDS

DATA        SEGMENT
   NOTE  DB "Please set Number N (N <= 10):","$" 
   ARRYA DW 20 DUP(?)   ;上一行数组A
   ARRYB DW 20 DUP(?)   ;当前行数组B
   CT    DW 0           
   ROW   DW  ?          ;(行号-1)*2
   DIVED  DB 2          
DATA        ENDS

CODE        SEGMENT
            ASSUME   CS:CODE , DS:DATA , SS:STACKSG
MAIN    PROC    FAR

        MOV     AX,DATA
        MOV     DS,AX

        MOV     AH,9
        LEA     DX,NOTE
        INT     21H
        XOR     AX,AX
;----------------------------------------
;输入要输出的行数
NEWCHARA:   
        MOV     AH,1
        INT     21H 

        SUB     AL,30H  
        JL      STEP2
        CMP     AL,9
        JG      STEP2
        CBW     

        XCHG    AX,BX
        MOV     CX,10   
        MUL     CX  
        XCHG    AX,BX   
        ADD     BX,AX

        INC     CT  
        JMP     NEWCHARA
;----------------------------------------
STEP2:          
        MOV     AX,BX
        SUB     AL,1
        MUL     DIVED
        MOV     ROW,AL

        MOV     CX,0          ;行号*20开始
LOP1:
        CALCULATE ARRYA,ARRYB ;计算当前行的数字
        OUTARRY   ARRYB       ;输出当前行的数字 
        COPYARRY ARRYA,ARRYB  ;将数组B复制到A中

        ADD CX,2
        CMP CX,WORD PTR ROW
        JNG SB
        JMP EXIT
SB:     JMP FAR PTR LOP1 
;----------------------------------------

EXIT:   MOV AX,4C00H
        INT 21H         

MAIN        ENDP
CODE        ENDS
            END     MAIN
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值