アセンブリ言語でフィボナッチ数列の最初の 24 個の値を表示するプログラムを作成するにはどうすればよいですか?
誰かが私を助けることができれば、私はそれを大いに感謝します.私はアセンブリのコードと混同しています.
コードは実行するシステムに依存するため(コンパイラとオペレーティングシステムを指定しなかったため)、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
それが役に立てば幸い。
他のほとんどの言語と同じように、次のようにします。
for loop counter = 1 to 24 do
next_number = fibonacci(previous, previous2)
print(next_number)
previous2 = previous
previous = next_number
他の言語との明らかな違いは次のとおりです。
フィボナッチ数列の数値は、その前の 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 レジスターに保持できます。
このコードを試してみてください。要件に従って機能します。この回答は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