我在学习汇编语言并尝试解决以下问题。我编写了代码,但它不起作用。汇编语言代码问题
编写一个程序,该程序使用循环来计算由以下公式描述的斐波那契数列的前七个值: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