0

I have been struggling to get this to work for days and have had no luck getting it to work. I would really appreciate some help figuring this out.

(This is in MASM Assembly and the only library allowed is the Irvine Library)

The program is a basic Fibonacci number generator. It takes user input from 1-46 (n)and then prints the Fibonacci sequence up to the nth term.

The output should be 5 terms per row with at least 5 spaces in between. This part works.

Edit* The part I am having issues with is getting the output to line up in columns when the integer length is greater than 7 digits.

I attempted to implement this by passing a TAB to the console which works but only up to 7 digit long integers. I understand why this is but I can't find a way around it. I tried printing spaces of varying length to no avail. My guess is that I either need to count the length of the integer and print the correct number of spaces based on the length after row 7 or use Gotoxy() from the Irvine library but I am having trouble wrapping my head around exactly how.

Here is the output-

1               1               2               3               5

8               13              21              34              55

89              144             233             377             610

987             1597            2584            4181            6765

10946           17711           28657           46368           75025

121393          196418          317811          514229          832040

1346269         2178309         3524578         5702887         9227465

14930352                24157817                39088169                  63245986                102334155
165580141               267914296               433494437               701408733               1134903170
1836311903              Press any key to continue . . .

Here is the relevant code...

mov     rowPosition,1           ;assign initial row positon 
mov     currentTerm, 0          ;makes first two terms 1
mov     previousTerm, 1
mov     ecx, nthTerm            ;set counter to nth term 

printFib:       
            mov     eax,currentTerm
            mov     ebx,currentTerm     ;mov current term to ebx to hold  value
            add     eax,previousTerm    ; = currentTerm + previousTerm
            call    WriteDec            ;writes new term
            mov     currentTerm,eax     ;set newly calculated term to currentTerm
            mov     previousTerm,ebx    ;set previousTerm to equal current Term

            mov     al, 9               ; ASCII CHAR 9 =  TAB
            call    WriteChar           ;writes tab to align text
            call    WriteChar

            cmp     rowPosition, 5      ;checks postion in row
            jge     newRow              ;jump if rowPostion greater than or equal to 5
            inc     rowPosition         ;else increment rowPosition
            loop    printFib            ;If ECX!=0 Loop to printFib 
            jmp     goodbye

newRow:     call        crlf            ; move to next row
            mov         rowPosition, 1  ;reset row postion to 1
            loop        printFib        ;If ECX!=0 Loop to printFib 

Can anyone please point me in the right direction?

Snydetar
  • 1
  • 1
  • 3
  • Or just use an additional tab character in lines 1-7. But yes, [calculating the length of the output](http://stackoverflow.com/questions/9721042/count-number-of-digits-which-method-is-most-efficient) and padding it with the appropriate number of spaces would probably be the more elegant solution. – Cody Gray - on strike Jul 09 '16 at 07:30
  • @CodyGray Thank you!! I don't know why I didn't see that just adding another tab character in the first 7 rows would fix it. I just implemented the fix and it is working correctly. – Snydetar Jul 09 '16 at 17:11

0 Answers0