;已知 an = a(n - 1) + 3 * a(n - 2),且 a1 = 0, a2 = 1;
;当 n >= 3时,编写一个求 an 的子程序。
;下列程序已经调试通过。全部代码如下:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DATA SEGMENT
BUFFER1 DB 13, 10, 'Please input n (3~9): $'
BUFFER2 DB 13, 10, 'an = $'
CR_LF DB 13, 10, '$'
AN1 DW 0
AN2 DW 1
AN3 DW ?
NNN DW ?
DATA ENDS
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START:
MOV AX, DATA
MOV DS, AX
;--------------------------
MOV DX, OFFSET BUFFER1
MOV AH, 9
INT 21H
MOV AH, 1
INT 21H ;AL: 33H~39H
SUB AL, 32H ;AL: 01H~07H
MOV AH, 0
MOV NNN, AX
MOV DX, OFFSET BUFFER2
MOV AH, 9
INT 21H
;--------------------------
MOV CX, NNN
SSS:
MOV AX, AN1
MOV BX, 3
MUL BX
ADD AX, AN2 ;
MOV BX, AN2
MOV AN1, BX
MOV AN2, AX
LOOP SSS
MOV AN3, AX
CALL PRINTAX
MOV DX, OFFSET CR_LF
MOV AH, 9
INT 21H
MOV AX, 4C00H
INT 21H
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PRINTAX PROC
MOV BX, 10
XOR CX, CX
@@: XOR DX, DX
DIV BX
MOV DH, 0EH
PUSH DX
INC CX
CMP AX, 0
JNZ @B
@@: POP AX
ADD AL, 90H
DAA
ADC AL, 40H
DAA
INT 10H
LOOP @B
RET
PRINTAX ENDP
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CODE ENDS
END START
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
上述程序执行的效果如下:
c:\masm510>AN
Please input n (3~9): 4
an = 4
c:\masm510>AN
Please input n (3~9): 7
an = 40
c:\masm510>AN
Please input n (3~9): 9
an = 217
c:\masm510>
大家可以试试输入其它数字。
注意:因为题目的要求,写的很简单,所以本程序也就没有写错误检验部分。输入的时候,不要输入 3~9 以外的数字,否则结果难以预料。