アセンブリ言語の配列の平均、最小、最大を見つける際に問題があります。私はC++で単純な配列を作成し、それを渡すためのtest.asmファイルを作成しました。私は平均を考え出しましたが、今ではそれが分かりません。アセンブリの平均、最小、最大を見つける
#include <iostream>
using namespace std;
extern "C"
int test(int*, int);
int main()
{
const int SIZE = 7;
int arr[SIZE] = { 1,2,3,4,5,6,7 };
int val = test(arr, SIZE);
cout << "The function test returned: " << val << endl;
return 0;
}
これは、最大が同様に行われることになるので、私はまだ分を見つける方法を把握しようとしていますすべての値を返す4.
.686
.model flat
.code
_test PROC ;named _test because C automatically prepends an underscode, it is needed to interoperate
push ebp
mov ebp,esp ;stack pointer to ebp
mov ebx,[ebp+8] ; address of first array element
mov ecx,[ebp+12]
mov ebp,0
mov edx,0
mov eax,0
loopMe:
cmp ebp,ecx
je allDone
add eax,[ebx+edx]
add edx,4
add ebp,1
jmp loopMe
allDone:
mov edx,0
div ecx
pop ebp
ret
_test ENDP
END
を追加私のTEST.ASMです方法。私はあなたが値を比較するためにcmpを使用すると仮定しますが、これまでに試したことはすべて成功しませんでした。私はアセンブリ言語をかなり新しく理解しています。どんな助けもありがとうございます。
代わりにCで記述し、コンパイラの出力を見て、それが何であるかを確認してください。次に、実際にアセンブリに書き込むかどうかを決定します。 –
最小/最大を保持するレジスタを選択し、最初の配列要素で初期化します。次に、 'cmp'命令を使って、その値を現在の要素に置き換えるかどうかを決定します。シンプル。 –
最小、最大、平均を呼び出しプロセスに戻しますか? 1つの32ビットレジスタで値が255未満であれば、これを行うことができますが、それ以上の値には追加ロジックが必要です。 –