但我只得到:01 01 00 00 00 00 00 00 00 00 00 00
非常感谢任何提示或帮助。
INCLUDE Irvine32.inc
.data
reg DWORD -1,1,0 ; Initializes a DOUBLEWORD array, giving it the values of -1, 1, and 0
array DWORD 48 DUP(?)
Fibonacci BYTE 1, 1, 10 DUP (?)
.code
main PROC
mov array, 1
mov esi,OFFSET array ; or should this be Fibonacci?
mov ecx,12
add esi, 4
L1:
mov edx, [reg]
mov ebx, [reg+4]
mov [reg+8], edx
add [reg+8], ebx ; Adds the value of the EBX and 'temp(8)' together and stores it as temp(8)
mov eax, [reg+8] ; Moves the value of 'temp(8)' into the EAX register
mov [esi], eax ; Moves the value of EAX into the offset of array
mov [reg], ebx ; Moves the value of the EBX register to 'temp(0)'
mov [reg+4], eax ; Moves the value of the EAX register to 'temp(4)
add esi, 4
; call DumpRegs
call WriteInt
loop L1
;mov ebx, offset array
;mov ecx, 12
;L2:
;mov eax, [esi]
;add esi, 4
;call WriteInt
;loop L2
;Below will show hexadecimal contents of string target-----------------
mov esi, OFFSET Fibonacci ; offset the variables
mov ebx,1 ; byte format
mov ecx, SIZEOF Fibonacci ; counter
call dumpMem
exit
main ENDP
END main
答案 0 :(得分:2)
您对dumpMem的调用是正确的,但您的程序没有将计算结果存储在正确的位置:您调用的区域“Fibonacci”仍然初始化为1,1和10个零。你需要确保你的循环开始以Fibonacci加2的偏移量开始写入,并以1字节为增量移动十次(十次,而不是十二次,因为你在初始化器中提供了两个初始项)。
对不起,我不能再具体了,因为任何包含“斐波那契”这个词的问题都不可避免地成为某人的作业: - )
答案 1 :(得分:2)
在我看来,这里的问题是计算Fibonacci序列。你的代码让我有点......困惑。那里有一堆“东西”,似乎与计算Fibonacci数字无关(例如reg
),有些可能,但看起来你真的不知道你在尝试什么和他们一起做。
看着你的循环计算序列,实际上跳出来的第一件事就是你正在使用内存 lot 。编写汇编语言时,最重要的(也是最重要的)事情之一就是最大限度地利用寄存器并最大限度地减少对内存的使用。
作为一个提示,我想如果你在课程中从内存中读取任何,如果计算序列,你可能犯了一个错误。您应该能够在寄存器中执行所有计算,因此唯一的内存引用将是写入结果。由于您(显然)只产生字节大小的结果,因此您只需要一个具有适当字节数的数组来保存结果(即,您将要生成的每个数字一个字节)。
我很想写一个小例程,说明这可以很好地适应汇编语言,但我想我可能不应该这样做......