#include <stdio.h>
#include <string.h>


#define ARRSIZE 5


void bubbleSort(int *array, int arrSize)
{
	__asm
	{
		MOV ESI, 0					; sorted = false

		MOV EBX, array				; EBX = Array-Stelle

		WHILE_NOT_SORTED:

		CMP SI, 0
		JNE END_WHILE_NOT_SORTED

			MOV EBX, array				; EBX = Array-Stelle

			MOV ESI, 1

			MOV ECX, arrSize		; ECX: Counter

			FOR:
				MOV EDX, EBX
				ADD EDX, 4			; EDX: array[j+1]

				MOV EAX, [EDX]		; EAX: Inhalt von array[j+1]

				CMP [EBX], EAX		; if (array[j] > array[j+1];

				JLE FALSE

					MOV ESI, 0		; sorted = false

					MOV EAX, [EBX]	; temp = array[j]
					MOV EDI, [EDX]

					MOV [EBX], EDI
					MOV [EDX], EAX



					;MOV EDI, [EBX]	; temp = array[j]

					;MOV [EBX], EAX	; array[j] = array[j+1]

					;MOV [EDX], EDI	; array[j+1] = temp

				FALSE:

				ADD EBX, 4

				DEC ECX
				JNZ FOR

			; END FOR

			JMP WHILE_NOT_SORTED

		END_WHILE_NOT_SORTED:
	}
}


int main(void)
{
	int arrSize = ARRSIZE;
	int array[] = {5, 4, 3, 2, 1};
	int i;

	puts("BubbleSort");
	puts("----------");
	puts("");
	puts("BubbleSort in Assembler");
	puts("");

	printf("Array: 5, 4, 3, 2, 1\n");
	//scanf("%s", s1);



	bubbleSort(&array, arrSize);

	puts("");
	for(i=0; i<arrSize; i++)
	{
		printf("array[%i] = %i\n", i, array[i]);
	}

	system("pause");
	return 0;

}


