magicQS: mov r0, -(sp) mov r1, -(sp) mov r2, -(sp) mov r3, -(sp) mov r4, -(sp) mov r5, -(sp) mov 16(sp), r2 ; put the arr adress in r2. mov #diffArr, r0 ; put the difArr adress in r0. mov 14(sp), r1 ; put the length of the arrays in r1. createDiff: cmp r1, #0 beq magicDiff tst -(sp) ; allocate a place for the result magic number in the stack number. mov (r2), -(sp) ; puts the value of the first node of arr in the stack. jsr pc, getMagic tst (sp)+ ; deallocate the place of the first node which we dont need anymore. mov (sp)+, (r0) ; puts the magic number we calculated in the diffArr, and deallocate its place from the stack. add #2, r2 ; now r2 points to the next node of arr. add #2, r0 ; now r0 points to the next node of diffArr. sob r1, createDiff magicDiff: mov #diffArr, -(sp) ; mov 14(sp), -(sp) ; saves the size of the array in the stack. jsr pc, Rec Rec: Rec cmp 2(sp), #1 ; checks if the size of the array is 1. ble RecEnd R1 jsr r5, rand ; calls the func which will give me a random number. .word 2(sp) ; the inline parameter - the size of the array. tst -(sp) ;allocate a place in the stack for the result of magicPartition. mov 4(sp), -(sp) ; restore the adress of the array in the stack. mov 2(sp), -(sp) ; restore the size of the array. mov r0, -(sp) ; r0 contains the random number which was calculated in rand. jsr pc, magicPartition mov (sp)+, (sp)+ tst (sp)+ mov (sp)+, r1 ;