打印杨辉三角汇编语言实现
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