私は自分の時間にアセンブリ言語を学び、次の問題を解決しようとしています。私はコードを書いたが、うまくいかない。 Fib(1)= 1、のFib(2)= 1、のFib(N)=のFib:アセンブリ言語コードの問題
以下の式によって記述フィボナッチ数列の最初の7つの値を計算するためにループを使用するプログラムを書きます(n-1)+ Fib(n-2)である。
このプログラムはアセンブリ言語で書かれています。アセンブリ言語でコードを記述する手順として、プログラムテンプレートのコメントを使用します。私は、このプログラミング・ロジック次のプログラムは、アセンブリ言語で書かれたい:私は次のように私のコードを編集した
ExitProcess PROTO
.data
numbers DWORD 10 DUP (?)
.code
main PROC
mov ebx,0
mov edx,1
mov numbers,edx
mov ecx,6
mov esi,4
L1:
mov eax,ebx
add eax,edx
mov esi,OFFSET numbers
mov [esi],edx
mov eax,ebx
add eax,edx
mov edx,ebx
mov eax,edx
add esi,4
Loop L1
call ExitProcess
main ENDP
END
:
.data
;declare an array
.code
main proc
;move 0 into ebx to initialize
;move 1 into edx to store the first Fib value
;move edx into an array ; store the first Fib value
; prepare to loop
; loop counter for 6 more values
; move esi,4
; array index for 3rd Fib value
L1:
;move ebx into eax
;add edx and eax
;move edx into the array of esi
; eax = ebx
; eax = eax + edx
; store the Fib value
;move edx into ebx
; prepare for next iteration
;move eax into edx
;add 4 to esi
;Loop L1
invoke ExitProcess,0
私のコード
ExitProcess PROTO
.data
numbers DWORD 10 DUP (?)
.code
main PROC
mov ebx,0
mov edx,1
mov numbers,edx
mov ecx,10
mov esi,4
mov esi,OFFSET numbers
L1:
mov eax,ebx
add eax,edx
mov [esi],edx
mov ebx,edx
mov edx,eax
add esi,4
Loop L1
call ExitProcess
main ENDP
END
ときIコードをステップ実行すると、eaxレジスタとedxレジスタはフィボナッチシーケンス値1,2,3,5,8,13などを表示します。しかし、コードはeaxレジスタまたはedxレジスタ値を数値aに格納しますか?ラリー?もしそうでないなら、私はこれをどうやって行うのか?
これは有効なコード行ですか?数値配列にedx値を格納していますか?
mov numbers,edx
数値配列にeax値またはedx値を格納するにはどうすればよいですか?
スタックオーバーフローは、「please give me te codez」のようなウェブサイトではありません。 – fuz
次回は、コードを記入するときにコメントを削除しないでください。たぶんあなたは少しコンパクトにすることができますが、参照とデバッグのためにそれらを保持します。 – Ped7g
'mov番号、edx'はMASM(TASMもMASMをエミュレートする)で有効です。 'mov DWORD PTR [ds:OFFSET numbers]、edx'(それを正確に記述する冗長な技術的方法)にコンパイルされます。ソースの読者から '[]'(メモリアクセス)が隠れているので、妥当ですが、混乱し、醜いです!問題のあなたの新しい編集は、デバッグしてメモリと 'esi'値を見て、' OFFSET数値 'と比較すれば、ちょっとしたキャッチでほぼ正確です。あなたはすぐにそれを修正します。 – Ped7g