汇编语言中的斐波纳契数列

时间:2013-05-07 00:58:16

标签: c assembly fibonacci

或多或少需要一些帮助来理解这一点。我们刚刚进入循环和OFFSET操作数,并希望得到一些帮助。所以这是我的指示:


使用带有间接寻址模式的LOOP指令编写汇编语言程序,该模式计算Fibonacci数序列中的前12个值{1,1,2,3,5,8,13,...}。将每个值放在EAX寄存器中,并在循环内调用DumpRegs语句显示它。

请使用以下变量定义:      Fibonacci BYTE 1,1,10 DUP(?)

循环后立即插入以下语句。它们将显示目标字符串的十六进制内容:   mov esi,OFFSET Fibonacci;抵消变量   mov ebx,1;字节格式   mov ecx,SIZEOF Fibonacci;计数器   call dumpMem;在内存中显示数据

如果您的程序正常运行,程序运行时屏幕上会显示以下十六进制字节序列: 01 01 02 03 05 08 0D 15 22 37 59 90


    .data

Fibonacci BYTE 1, 1, 10 DUP (?)

.code
main PROC

  L1:

  mov   esi, OFFSET Fibonacci       ; offset the variables
  mov   ebx,1               ; byte format
  mov   ecx, SIZEOF Fibonacci       ; counter
  call  dumpMem             ; display the data in the memory


    exit                    ;exits to Operating System
    main ENDP

END main

所以我知道我需要做一个循环语句,但我完全坚持如何开始它。任何建议将不胜感激!

2 个答案:

答案 0 :(得分:2)

我相信你只想知道如何在程序集中创建循环。请参阅以下示例:

x86 assembly programming loops with ecx and loop instruction versus jmp + j<condition>

答案 1 :(得分:0)

.586
.MODEL FLAT
INCLUDE io.h            ; header file for input/output
.STACK 4096


.DATA

resultLbl BYTE  "The result is", 0
sum     BYTE    11 DUP (?), 0

.CODE
_MainProc PROC

       mov eax,1
       mov ebx,1  ;  will store answer 
      dtoa  sum , eax
      output resultLbl , sum
      dtoa sum ,ebx 
      output  resultLbl ,sum
      mov ecx ,5
_for:
         mov edx , eax
     add edx , ebx
     dtoa sum ,edx
     output  resultLbl ,sum
     mov  eax ,ebx
     mov  ebx ,edx
     dec ecx
     cmp ecx , 0
     jne _for
     mov eax , 0
     ret


_MainProc ENDP
END