1

アセンブリ言語でフィボナッチ数列の最初の 24 個の値を表示するプログラムを作成するにはどうすればよいですか?

誰かが私を助けることができれば、私はそれを大いに感謝します.私はアセンブリのコードと混同しています.

4

4 に答える 4

1

コードは実行するシステムに依存するため(コンパイラとオペレーティングシステムを指定しなかったため)、2つの空白スペースを残しました。

私はコードをテストしていませんが、うまくいくと思います。

    mov eax, 0         ; first number
    mov ebx, 1         ; second number
                       ; edx will contain the third number (eax + ebx )

    mov ecx, 24 - 2    ; print 24 numbers (don't count the first
                         and second because they are printed in the begining)

    mov edx, eax
    call print_number  ; print the first number

    mov edx, ebx
    call print_number  ; print the second number
fibo:
    mov edx, eax
    add edx, ebx       ; edx = eax + ebx

    call print_number

    ; now we have the third number in edx
    ; eax = 1st, ebx = 2nd, edx = 3rd
    ; to prepare eax and abx for the next iteration, shift the values to the right
    ; eax = 2nd, ebx = 3rd, edx = ?
    mov eax, ebx
    mov ebx, edx

    loop fibo

    ; TO DO: exit program

print_number:
    ; TO DO: edx contains the number, print it
    return

それが役に立てば幸い。

于 2011-03-23T16:26:15.080 に答える
1

他のほとんどの言語と同じように、次のようにします。

for loop counter = 1 to 24 do
    next_number = fibonacci(previous, previous2)
    print(next_number)
    previous2 = previous
    previous = next_number

他の言語との明らかな違いは次のとおりです。

  1. この場合、「変数」はおそらくすべてレジスターにあります。
  2. 数値を変換して出力するには、おそらく独自のコードを作成する必要があります。
于 2011-03-22T20:31:55.647 に答える
0

フィボナッチ数列の数値は、その前の 2 つの数値の合計です。簡単にするために、最初の 2 つの要素を 1 に設定して、これらの数値を配列に格納できます。esi と edi は n-1 と n-2 を指すことができるため、fibonacci(n) = [esi] + [edi]] right ? 擬似コードでは次のようになります。

fibonacci    DWORD    24 dup (?)

esi = fibonacci(0)       // those are pointers to elements!
edi = fibonacci(1)

for x = 2 to 23
    fibonacci(x) = [esi] + [edi]
    esi += 4             // if you don't like DWORDs change this
    edi += 4
end loop

x を ecx レジスターに、 fibonacci(x) を eax レジスターに保持できます。

于 2011-03-22T20:31:09.873 に答える
-1

このコードを試してみてください。要件に従って機能します。この回答は24回実行されるループを使用し、ループされたラベルが次にあり、最初にaxとbxからデータを取得してから合計しますこれらすべての関数が24回繰り返されるまでループが完了しました。

   data segment
    org 0000h
    arr dw 17h dup(0000h)
    data ends
    code segment
    assume cs:code, ds:data
    start:  mov ax,data
        mov ds,ax
        mov cx,0018h
        lea si,arr
        inc si
        mov [si],01h
    next:   mov ax,[si-1]
        mov bx,[si]
        add ax,bx
        inc si
        mov [si],ax
        loop next
        mov ah,4ch
        int 21h
     code ends
    end start
    end
于 2018-03-25T07:22:20.027 に答える