在TASM装配中打印斐波那契数

时间:2014-10-14 15:38:36

标签: assembly numbers fibonacci tasm

在大学里,我们开始学习TASM汇编语言。关键是,我需要帮助,因为我完全迷失了我的任务。我需要从键盘扫描一个数字并打印斐波那契的n号码。示例:键入6,程序打印出8。

这是我未完成的代码:

.model small
.stack 100h

.data 
    number db 255

.code
start:
    mov dx, @data
    mov ds, dx
    mov al, 0
    mov bl, 1

.readline:
    mov ah, 0Ah
    mov dx, offset number
    mov cx, dx;
    int 21h

.fibonacci:
    add al, bl
    mov dl, al
    mov al, bl
    mov bl, dl

    loop .fibonacci
    int 21h
.writeln
    mov ah, 9
    mov dx, dl
    int 21h


end start   

在此之后,我只是不知道该怎么做或者是否有任何错误。任何人都可以给我建议我接下来需要做什么吗?

2 个答案:

答案 0 :(得分:1)

Here是PDF手册,其中包含实现用户输入和输出所需的一些代码示例。

下面是一段未经测试的代码,可让您了解如何在不递归的情况下计算Fibonacci序列。

    mov  cx, 6
    mov  ax, 0    ;a = 0
    mov  bx, 1    ;b = 1
fib:
    mov  dx, ax 
    add  dx, bx   ;sum = a + b
    mov  ax, bx   ;a = b
    mov  bx, dx   ;b = sum
    loop fib

请注意,您必须将计数寄存器(CX)设置为给定的用户输入。

另外请记住,您使用的是32位寄存器,因此您可以存储在寄存器中的最大斐波纳契数是第46位。

答案 1 :(得分:-2)

.MODEL SMALL

.DATA
.CODE
 MAIN PROC

            MOV AX,@DATA
            MOV DX,AX

            MOV AL,20
            MOV CL,10
            MOV AH,00
            DIV CL
            MOV DX,AX
            ADD DX,3030h
            MOV AH,02H
            INT 21H

            MOV DL,DH
            INT 21H




            MOV AX,4C00H
            INT 21H

MAIN ENDP
相关问题