編輯:我已經洗掉了我的代碼,因為我不想因為在我的作業中作弊而被抓到。一旦我的作業提交,我將重新發布代碼。我很抱歉將它發布在堆疊溢位上,我只是無處可去尋求幫助。請尊重我的編輯以洗掉代碼。我試過洗掉它,但它不會讓我,因為我需要請求它。
[我試圖遵循的 MIPS 代碼][1]
[我試圖遵循的 C 代碼][2]
我正在嘗試將遞回斐波那契代碼轉換為 arm 程式集,但我遇到了問題。運行我的手臂程式集時,總和的最終值是 5,而它應該是 2。看起來好像我的代碼回圈了但可能回圈次數太多了。任何幫助將不勝感激,因為我是新手。
uj5u.com熱心網友回復:
這就是你的代碼正在做的事情,下面是一個測驗運行。這根本不是通常的遞回斐波那契。
#include <stdio.h>
void f ( int );
int R2 = 0;
int main () {
for ( int i = 0; i < 10; i ) {
R2 = 0;
f ( i );
printf ( "f ( %d ) = %d\n", i, R2 );
}
}
void f ( int n ) {
if ( n == 0 ) { R2 = 0; return; }
if ( n == 1 ) { R2 = 1; return; }
f ( n-1 );
f ( n-2 );
R2 = n-1;
}
f ( 0 ) = 0
f ( 1 ) = 1
f ( 2 ) = 2
f ( 3 ) = 5
f ( 4 ) = 10
f ( 5 ) = 19
f ( 6 ) = 34
f ( 7 ) = 59
f ( 8 ) = 100
f ( 9 ) = 167
要么您開始使用損壞的斐波那契演算法,要么在組裝程序中對其進行了重大更改。我不知道如何解決這個問題,除非遵循作業演算法。
uj5u.com熱心網友回復:
請注意,在 C 代碼中,唯一的添加是在fib(n-1) fib(n-2). 特別是特殊情況只是分別做return 0;和return 1;。因此你的else add 0/1 to sum臺詞是錯誤的。你應該用移動替換你的添加。
此外,您這樣做MOV R1, R0 //copy fib(n-1) 是不正確的,因為fib(n-1)已在R2not 中回傳R0。那應該是MOV R1, R2。
通過這些更改,代碼可以作業,即使它有點不標準。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315396.html
