Ich habe ein Problem bei der Suche nach dem Durchschnitt, Minimum und Maximum eines Arrays in Assemblersprache. Ich habe ein einfaches Array mit C++ erstellt und eine test.asm-Datei erstellt, um sie zu übergeben. Ich habe den Durchschnitt herausgefunden, aber jetzt ist es das Minimum und Maximum, das ich anscheinend nicht herausfinden kann.Durchschnitt, Min und Max in Assembly finden
#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;
}
Das ist mein test.asm, dass die Werte alles addiert und liefert 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
ich immer noch herauszufinden, wie ich versuche, die min zu finden, da wird der max in einem ähnlichen erfolgen Weg. Ich nehme an, Sie verwenden die cmp, um Werte zu vergleichen, aber alles, was ich bisher versucht habe, war nicht erfolgreich. Ich bin ziemlich neu in Assembler Sprache und es ist schwer für mich zu begreifen. Jede Hilfe wird geschätzt.
Schlage vor, es in C zu schreiben, und schaue auf die Compiler-Ausgabe, um zu sehen, was es tut. Entscheiden Sie dann, ob Sie tatsächlich in Assembly schreiben möchten. –
Wählen Sie ein Register, um Ihre Min/Max zu halten, und initialisieren Sie es mit dem ersten Array-Element. Verwenden Sie dann den Befehl "cmp", um zu bestimmen, ob dieser Wert durch das aktuelle Element ersetzt werden soll oder nicht. Einfach. –
Möchten Sie Minimum, Maximum und Durchschnitt zum Aufrufprozess zurückgeben? Dies kann gemacht werden, solange Werte in einem 32-Bit-Register kleiner als 255 sind, aber Werte, die größer als das sind, würden zusätzliche Logik benötigen. –