80x86 汇编语言:编程一题


;已知 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 以外的数字,否则结果难以预料。


原题网址:http://zhidao.baidu.com/question/437858233.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值