Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void sort(int* arr, int size);
- int main(void) {
- int arr[10] = { 5, 9, 21, 128, 256, 0, 2, 9, 512, 32 };
- sort(arr, sizeof(arr)/4);
- int i = 0;
- for (i; i < sizeof(arr) / 4; ++i) {
- printf("%d ", arr[i]);
- }
- getchar();
- getchar();
- return 0;
- }
- void sort(int* arr, int size) {
- void* espPointer;
- __asm {
- push esi
- push edi
- mov [ebp - 4], esp //SAVE STACK POINTER
- mov esp, [ebp + 12] //contidionInner
- mov esi, 0 //iterOut
- mov edi, 0 //iterInner
- mov eax, [ebp + 8] //arr begin
- mov ebx, 0 //bits to add
- mov ecx, 0 //temp1
- mov edx, 0 //temp2
- outer_loop:
- cmp esi, [ebp + 12]
- je outerOut
- inner_loop:
- cmp edi, esp
- je innerOut
- mov ecx, [eax + ebx] //write to value1 first value
- add ebx, 4 //to get next value
- mov edx, [eax + ebx] //write to value2 seconde value
- bigger:
- cmp ecx, edx
- jna notBigger
- xchg ecx, edx
- sub ebx, 4 //to rewrite 1st value
- mov [eax + ebx], ecx
- add ebx, 4
- mov [eax + ebx], edx
- notBigger:
- inc edi
- jmp inner_loop
- innerOut:
- dec esp // j - outer loop iteration
- mov edi, 0 // set 0 to inner loop increment variable
- inc esi //outer loop
- mov ebx, 0 //0 bits to add
- jmp outer_loop
- outerOut:
- mov ebx, 0
- mov edi, 0 //condition
- mov esp, [ebp - 4] //REWRITE STACK POINTER
- pop edi
- pop esi
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement