我在學習彙編語言並嘗試解決以下問題。我編寫了代碼,但它不起作用。彙編語言代碼問題
編寫一個程序,該程序使用循環來計算由以下公式描述的斐波那契數列的前七個值:Fib(1)= 1,Fib(2)= 1,Fib(n)= Fib (n-1)+ Fib(n-2)。
我需要用匯編語言編寫的這個程序。使用程序模板中的註釋作爲說明,以彙編語言編寫代碼。我想在彙編語言編寫的程序如下這種編程邏輯:
.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,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
我編輯我的代碼如下:
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
當我單步執行代碼,eax寄存器和edx寄存器將顯示Fibonacci序列值:1,2,3,5,8,13等。但是,代碼是否將eax寄存器或edx寄存器值存儲在數字a中rray?如果不是,我該怎麼做。
這是一個有效的代碼行嗎?它是否將edx值存儲在numbers數組中?
mov numbers,edx
如何將eax或edx值存儲在numbers數組中?
堆棧溢出不是一個「請給我teh codez」類網站。 – fuz
下次在填寫代碼時不要刪除註釋。也許你可以壓縮他們一些,但保持它們的參考和調試。 – Ped7g
'mov numbers,edx'在MASM中有效(TASM也在模擬MASM)。它編譯爲'mov DWORD PTR [ds:OFFSET numbers],edx'(詳細描述它的技術方式)。這是有效的,但令人困惑和難堪,因爲它隱藏了源碼閱讀器的'[]'(內存訪問)!你的新編輯幾乎是正確的,只要稍加捕捉,如果你要調試它並觀察內存和esi值,並將它與'OFFSET數字'進行比較,你很快就會修復它,你就近了。 – Ped7g