Bifogade programexempel: rek.q : Det rekursiva programmet vi skulle skriva visa. arit.q : Visar lite beräkningar. Både aritmetiska och booliska bool.q : Visar en boolisk funktion, och hur man typkonverterar test.q : Ett testprogram som visa globala variabler och egenglobala variabler samt hur proceduranrop fungerar. -------------------------------- rek.q ----------------------------------------- -------------------------------------------------------------------------------- { .# Result,N; @ fak( .# N ;) { ? N =? 0 :) ~1; :( ~N*fak( N-1 ); } « "Skriv N-värdet:"; N=»; ! N >? -1 :) { Result=fak(N); « "\nFakultet: "; « Result; « "\n Skrive N-värdet(negativt för at sluta):"; N=»; } } Output: Skriv N-värdet:3 Fakultet: 6 Skrive N-värdet(negativt för at sluta):2 Fakultet: 2 Skrive N-värdet(negativt för at sluta):8 Fakultet: 40320 Skrive N-värdet(negativt för at sluta):7 Fakultet: 5040 Skrive N-värdet(negativt för at sluta):6 Fakultet: 720 Skrive N-värdet(negativt för at sluta):5 Fakultet: 120 Skrive N-värdet(negativt för at sluta):-2 -------------------------------- rek.3add -------------------------------------- -------------------------------------------------------------------------------- allocfunc 8 goto L1 L2: allocfunc 8 UNload N MOV N #1 MOV 0 #2 CMP #1 #2 #1 TST #1 BEQ L3 MOV 1 #2 MOV #2 ..return GOTO L4 L3: MOV N #1 allochead MOV N #2 MOV 1 #3 SUB #2 #3 #2 param #2 call fak dealloc fak funstore #2 MUL #1 #2 #1 MOV #1 ..return L4: funload ..return deallocfunc 8 return L1: WriteText "Skriv N-värdet:" Call readint NOP MOV %o0 #1 MOV #1 N L6: MOV N #1 MOV 1 #2 NEG #2 GT #1 #2 #1 TST #1 BEQ L7 allochead MOV N #2 param #2 call fak dealloc fak funstore #2 MOV #2 #2 MOV #2 Result WriteText "\nFakultet: " MOV Result #1 WriteInt #1 WriteText "\n Skrive N-värdet(negativt för at sluta):" Call readint NOP MOV %o0 #1 MOV #1 N GOTO L6 L7: deallocfunc 8 -------------------------------- rek.s ----------------------------------------- -------------------------------------------------------------------------------- .seg "data" .skip 4096 stack: .word 0 L5: .asciz "Skriv N-värdet:" .align 4 L8: .asciz "\nFakultet: " .align 4 L9: .asciz "\n Skrive N-värdet(negativt för at sluta):" .align 4 .seg "text" .global main main: set stack,%g7 ! %g7 till stacken !-- Programmet. sub %g7,8,%g7 ! allocfunc set L1,%i5 !GOTO jmp %i5 nop L2: sub %g7,8,%g7 ! allocfunc st %i0,[%g7+8] ld [%g7+8],%l0 mov 0,%l1 cmp %l0,%l1 be L10 nop set L11,%i5 jmp %i5 mov 0,%l0 ! preformed befor the jmp L10: mov -1,%l0 L11: tst %l0 be L3 nop mov 1,%l1 st %l1,[%g7+4] set L4,%i5 !GOTO jmp %i5 nop L3: ld [%g7+8],%l0 sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 ld [%g7+8],%l1 mov 1,%l2 sub %l1,%l2,%l1 mov %l1,%i0 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L2,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l1 mov %l0,%o0 mov %l1,%o1 call .mul nop mov %o0,%l0 st %l0,[%g7+4] L4: ld [%g7+4],%o0 add %g7,8,%g7 ! Deallocfunc ld [%g7+4],%i5 jmp %i5 add %g7,4,%g7 L1: set L5,%o0 call writestring nop call readint nop mov %o0,%l0 st %l0,[%g7+4] L6: ld [%g7+4],%l0 mov 1,%l1 neg %l1 cmp %l0,%l1 bg L12 nop set L13,%i5 jmp %i5 mov 0,%l0 ! preformed befor the jmp L12: mov -1,%l0 L13: tst %l0 be L7 nop sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 ld [%g7+4],%l1 mov %l1,%i0 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L2,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l1 ! mov %l1,%l1---------------------Removed a move, Optimized st %l1,[%g7+8] set L8,%o0 call writestring nop ld [%g7+8],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L9,%o0 call writestring nop call readint nop mov %o0,%l0 st %l0,[%g7+4] set L6,%i5 !GOTO jmp %i5 nop L7: add %g7,8,%g7 ! Deallocfunc call _exit nop ------------------------------- arit.q ----------------------------------------- -------------------------------------------------------------------------------- { .# x, y, z, p, q, r; .$ a, b, c, d, e, f; «"Lite integers\n"; z=3; p=-25; q=34; r=5; x = - 1; y = ( ( z - 2 ) * 4 - 3 *(p / r) ) ; x = y*(z+(p*(q+(r*y+(q-r ) ) ) ) ); «"y=";«y;«" borde bli 19\n"; «"x=";«x;«" borde bli -74993\n"; «"Lite booleans\n"; a = ja; b = nein; c = \ ja; e = \ a; d = (a | b) & (c | e); f = \ d; «"d=";«d;«" borde bli 0 (Falsk)\n"; «"f=";«f;«" borde bli -1 (Sant)\n"; } OutPut: Lite integers y=19 borde bli 19 x=-74993 borde bli -74993 Lite booleans d=0 borde bli 0 (Falsk) f=-1 borde bli -1 (Sant) -------------------------------- arit.3add ------------------------------------- -------------------------------------------------------------------------------- allocfunc 48 WriteText "Lite integers\n" MOV 3 #1 MOV #1 #1 MOV #1 z MOV 25 #1 NEG #1 MOV #1 #1 MOV #1 p MOV 34 #1 MOV #1 #1 MOV #1 q MOV 5 #1 MOV #1 #1 MOV #1 r MOV 1 #1 NEG #1 MOV #1 #1 MOV #1 x MOV z #1 MOV 2 #2 SUB #1 #2 #1 MOV 4 #2 MUL #1 #2 #1 MOV 3 #2 MOV p #3 MOV r #4 DIV #3 #4 #3 MUL #2 #3 #2 SUB #1 #2 #1 MOV #1 #1 MOV #1 y MOV y #1 MOV z #2 MOV p #3 MOV q #4 MOV r #5 MOV y #6 MUL #5 #6 #5 MOV q #6 MOV r #7 SUB #6 #7 #6 ADD #5 #6 #5 ADD #4 #5 #4 MUL #3 #4 #3 ADD #2 #3 #2 MUL #1 #2 #1 MOV #1 #1 MOV #1 x WriteText "y=" MOV y #1 WriteInt #1 WriteText " borde bli 19\n" WriteText "x=" MOV x #1 WriteInt #1 WriteText " borde bli -74993\n" WriteText "Lite booleans\n" MOV -1 #1 MOV #1 #1 MOV #1 a MOV 0 #1 MOV #1 #1 MOV #1 b MOV -1 #1 NOT #1 MOV #1 #1 MOV #1 c MOV a #1 NOT #1 MOV #1 #1 MOV #1 e MOV a #1 MOV b #2 OR #1 #2 #1 MOV c #2 MOV e #3 OR #2 #3 #2 AND #1 #2 #1 MOV #1 #1 MOV #1 d MOV d #1 NOT #1 MOV #1 #1 MOV #1 f WriteText "d=" MOV d #1 WriteInt #1 WriteText " borde bli 0 (Falsk)\n" WriteText "f=" MOV f #1 WriteInt #1 WriteText " borde bli -1 (Sant)\n" deallocfunc 48 -------------------------------- arit.s ---------------------------------------- -------------------------------------------------------------------------------- .seg "data" .skip 4096 stack: .word 0 L1: .asciz "Lite integers\n" .align 4 L2: .asciz "y=" .align 4 L3: .asciz " borde bli 19\n" .align 4 L4: .asciz "x=" .align 4 L5: .asciz " borde bli -74993\n" .align 4 L6: .asciz "Lite booleans\n" .align 4 L7: .asciz "d=" .align 4 L8: .asciz " borde bli 0 (Falsk)\n" .align 4 L9: .asciz "f=" .align 4 L10: .asciz " borde bli -1 (Sant)\n" .align 4 .seg "text" .global main main: set stack,%g7 ! %g7 till stacken !-- Programmet. sub %g7,48,%g7 ! allocfunc set L1,%o0 call writestring nop mov 3,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+40] mov 25,%l0 neg %l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+36] mov 34,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+32] mov 5,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+28] mov 1,%l0 neg %l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+48] ld [%g7+40],%l0 mov 2,%l1 sub %l0,%l1,%l0 mov 4,%l1 mov %l0,%o0 mov %l1,%o1 call .mul nop mov %o0,%l0 mov 3,%l1 ld [%g7+36],%l2 ld [%g7+28],%l3 mov %l2,%o0 mov %l3,%o1 call .div nop mov %o0,%l2 mov %l1,%o0 mov %l2,%o1 call .mul nop mov %o0,%l1 sub %l0,%l1,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+44] ld [%g7+44],%l0 ld [%g7+40],%l1 ld [%g7+36],%l2 ld [%g7+32],%l3 ld [%g7+28],%l4 ld [%g7+44],%l5 mov %l4,%o0 mov %l5,%o1 call .mul nop mov %o0,%l4 ld [%g7+32],%l5 ld [%g7+28],%l6 sub %l5,%l6,%l5 add %l4,%l5,%l4 add %l3,%l4,%l3 mov %l2,%o0 mov %l3,%o1 call .mul nop mov %o0,%l2 add %l1,%l2,%l1 mov %l0,%o0 mov %l1,%o1 call .mul nop mov %o0,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+48] set L2,%o0 call writestring nop ld [%g7+44],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L3,%o0 call writestring nop set L4,%o0 call writestring nop ld [%g7+48],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L5,%o0 call writestring nop set L6,%o0 call writestring nop mov -1,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+24] mov 0,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+20] mov -1,%l0 not %l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+16] ld [%g7+24],%l0 not %l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+8] ld [%g7+24],%l0 ld [%g7+20],%l1 or %l0,%l1,%l0 ld [%g7+16],%l1 ld [%g7+8],%l2 or %l1,%l2,%l1 and %l0,%l1,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+12] ld [%g7+12],%l0 not %l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+4] set L7,%o0 call writestring nop ld [%g7+12],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L8,%o0 call writestring nop set L9,%o0 call writestring nop ld [%g7+4],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L10,%o0 call writestring nop add %g7,48,%g7 ! Deallocfunc call _exit nop -------------------------------- bool.q ---------------------------------------- -------------------------------------------------------------------------------- { .$ b1,b2; @true(.$p1,p2;) { .$ tt; tt= (p1 =? p2); ~tt; } b1=nein; b2=ja; ? $true( b1 , b2 ) :) « "sant"; :( « "falskt"; « "\n"; } OutPut: falskt -------------------------------- bool.3add ------------------------------------- -------------------------------------------------------------------------------- allocfunc 8 goto L1 L2: allocfunc 12 UNload p1 UNload p2 allocfunc 4 MOV p1 #1 MOV p2 #2 CMP #1 #2 #1 MOV #1 #1 MOV #1 tt MOV tt #1 MOV #1 ..return deallocfunc 4 funload ..return deallocfunc 12 return L1: MOV 0 #1 MOV #1 #1 MOV #1 b1 MOV -1 #1 MOV #1 #1 MOV #1 b2 allochead MOV b1 #1 param #1 MOV b2 #1 param #1 call true dealloc true funstore #1 CMP 0 #1 #1 NOT #1 TST #1 BEQ L3 WriteText "sant" GOTO L4 L3: WriteText "falskt" L4: WriteText "\n" deallocfunc 8 -------------------------------- bool.s ---------------------------------------- -------------------------------------------------------------------------------- .seg "data" .skip 4096 stack: .word 0 L5: .asciz "sant" .align 4 L6: .asciz "falskt" .align 4 L7: .asciz "\n" .align 4 .seg "text" .global main main: set stack,%g7 ! %g7 till stacken !-- Programmet. sub %g7,8,%g7 ! allocfunc set L1,%i5 !GOTO jmp %i5 nop L2: sub %g7,12,%g7 ! allocfunc st %i0,[%g7+12] st %i1,[%g7+8] sub %g7,4,%g7 ! allocfunc ld [%g7+16],%l0 ld [%g7+12],%l1 cmp %l0,%l1 be L8 nop set L9,%i5 jmp %i5 mov 0,%l0 ! preformed befor the jmp L8: mov -1,%l0 L9:! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+4] ld [%g7+4],%l0 st %l0,[%g7+8] add %g7,4,%g7 ! Deallocfunc ld [%g7+4],%o0 add %g7,12,%g7 ! Deallocfunc ld [%g7+4],%i5 jmp %i5 add %g7,4,%g7 L1: mov 0,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+8] mov -1,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+4] sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 ld [%g7+8],%l0 mov %l0,%i0 ld [%g7+4],%l0 mov %l0,%i1 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L2,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l0 cmp 0,%l0 be L10 nop set L11,%i5 jmp %i5 mov 0,%l0 ! preformed befor the jmp L10: mov -1,%l0 L11: not %l0 tst %l0 be L3 nop set L5,%o0 call writestring nop set L4,%i5 !GOTO jmp %i5 nop L3: set L6,%o0 call writestring nop L4: set L7,%o0 call writestring nop add %g7,8,%g7 ! Deallocfunc call _exit nop -------------------------------- test.q ---------------------------------------- -------------------------------------------------------------------------------- { ·# global,global1; .# lokal,a; @param(.# a,b,c,d,e,f,g,h,i,j,k;) { « "\tparam("; « a; « ","; « b; « ","; « c; « ","; « d; « ","; « e; « ","; « f; « ","; « g; « ","; « h; « ","; « i; « ","; « j; « ","; « k; « ")\n"; ~ a+b+c+d+e+f+g+h+i+j+k; } @FuskGlobal(.# ko; ) { .# lokal,global; lokal=global=ko; } @RiktigGlobal(.# ko; ) { .# lokal; lokal=global=ko; } @EgenGlobal(.# ko; ) { ·# global; .# lokal; lokal=global=ko; } @Nästlad(.# ko; ) { .# lokal; ·# global1; @Nästlad2(.# ko; ) { .# lokal; @Nästlad3(.# ko; ) { « "\t\t\tNivå 3\n"; « "\t\t\t-- Nu ändrar vi båda globala variabler.\n"; « "\t\t\t-- global1=ko (inparametern);\n\t\t\t-- global=137;\n"; global1=ko; global=137; « "\t\t\t Den anropar vi funkonen med de många parametrarna\n"; param(11,12,13,14,15,16,17,18,19,20,21); « "\t\t\t-- och retunerar ko² med: ~ ko*ko;\n"; ~ ko*ko; } « "\t\tNivå 2\n"; « "\t\t-- Ändrar först på global1 innan vi kollar invärdet(global1=34)\n"; global1=34; « "\t\t-- Hur blev det?: global1=";« global1;« ",in parameter 1=";« ko;«"\n"; « "\t\t-- Dax Att anropa inersta nivån. och retunerar ut svaret\n"; « "\t\t-- Innan anrop: global=";« global;« ",Global1=";« global1;«"\n"; « "\t\t-- ~ Nästlad3(99);\n"; ~ Nästlad3(99); « "\t\t-- Efter anrop: global=";« global;« ",Global1=";« global1;«"\n"; } « "\tNivå 1\n"; « "\t-- skapat en global variabel global1 och ger den värdet 12;\n"; « "\t-- Anropar sedan nästa nivå och tildelar global resultatet\n"; « "\t-- som inparameter har vi global1\n"; global1=12; « "\t-- Innan anrop: global=";« global;« ",Global1=";« global1;«"\n"; « "\t-- global=Nästlad2(global1);\n"; global=Nästlad2(global1); « "\t-- Efter anrop: global=";« global;« ",Global1=";« global1;«"\n"; « "\t-- Visa dubbel returnering:\n"; « "\t-- ~314;\n"; ~314; « "\t-- ~1000000; Detta är också en stor konstant som inte rymms i en valig asmbler istruktion\n"; ~1000000; } « "Lite tester av programspråket Q:\n"; { .# a; « "Test av en funktion med många in parametrar:\n"; a=param(1,2,3,4,5,6,7,8,9,10,11); « "Och retunerar summan:"; « a; « "\n"; } « "Test av globala och lokala variabler:lokal=global=1;\n"; lokal=global=1; « "Lokal:";« lokal; « ",Global:";« global;«"\n"; « "FuskGlobal(12); Här finns båda variablerna deklarerade lokalt så dom ska ej påvärkas\n"; FuskGlobal(12); « "Lokal:";« lokal; « ",Global:";« global;«"\n"; « "RiktigGlobal(13); Här finns endast lokal variabeln deklarerade så den globala kommer att ändras\n"; RiktigGlobal(13); « "Lokal:";« lokal; « ",Global:";« global;«"\n"; « "EgenGlobal(14); Här är global deklarerad igen fast nu globalt, den blir"; « " då endast global för den nivån och neråt"; « " så den kommer ej att påverkas global\n"; EgenGlobal(14); « "Lokal:";« lokal; « ",Global:";« global;«"\n"; global1=333; « "Dax att testa lite nivåer jag ska nu anropa en procedure som har egna procedurer;\n"; « "För att ytterliga visa globala id:s och Egen-globala så har vi två globala från början nämligen global och global1\n"; « "Innan anrop: global=";« global;«",global1=";« global1;«"\n"; « "a=Nästlad(12);\n"; a=Nästlad(12); « "a="; « a; « " som syns är det den senaste som kommer fram\n"; « "Efter anrop: global=";« global;«",global1=";« global1;«" som syns har global1 inte ändrat sig.\n"; } OutPut: Lite tester av programspråket Q: Test av en funktion med många in parametrar: param(1,2,3,4,5,6,7,8,9,10,11) Och retunerar summan:66 Test av globala och lokala variabler:lokal=global=1; Lokal:1,Global:1 FuskGlobal(12); Här finns båda variablerna deklarerade lokalt så dom ska ej påvärkas Lokal:1,Global:1 RiktigGlobal(13); Här finns endast lokal variabeln deklarerade så den globala kommer att ändras Lokal:1,Global:13 EgenGlobal(14); Här är global deklarerad igen fast nu globalt, den blir då endast global för den nivån och neråt så den kommer ej att påverkas global Lokal:1,Global:13 Dax att testa lite nivåer jag ska nu anropa en procedure som har egna procedurer; För att ytterliga visa globala id:s och Egen-globala så har vi två globala från början nämligen global och global1 Innan anrop: global=13,global1=333 a=Nästlad(12); Nivå 1 -- skapat en global variabel global1 och ger den värdet 12; -- Anropar sedan nästa nivå och tildelar global resultatet -- som inparameter har vi global1 -- Innan anrop: global=13,Global1=12 -- global=Nästlad2(global1); Nivå 2 -- Ändrar först på global1 innan vi kollar invärdet(global1=34) -- Hur blev det?: global1=34,in parameter 1=12 -- Dax Att anropa inersta nivån. och retunerar ut svaret -- Innan anrop: global=13,Global1=34 -- ~ Nästlad3(99); Nivå 3 -- Nu ändrar vi båda globala variabler. -- global1=ko (inparametern); -- global=137; Den anropar vi funkonen med de många parametrarna param(11,12,13,14,15,16,17,18,19,20,21) -- och retunerar ko² med: ~ ko*ko; -- Efter anrop: global=137,Global1=99 -- Efter anrop: global=9801,Global1=99 -- Visa dubbel returnering: -- ~314; -- ~1000000; Detta är också en stor konstant som inte rymms i en valig asmbler istruktion a=1000000 som syns är det den senaste som kommer fram Efter anrop: global=9801,global1=333 som syns har global1 inte ändrat sig. -------------------------------- test.3add ------------------------------------- -------------------------------------------------------------------------------- allocfunc 8 goto L3 L4: allocfunc 48 UNload a UNload b UNload c UNload d UNload e UNload f UNload g UNload h UNload i UNload j UNload k WriteText "\tparam(" MOV a #1 WriteInt #1 WriteText "," MOV b #1 WriteInt #1 WriteText "," MOV c #1 WriteInt #1 WriteText "," MOV d #1 WriteInt #1 WriteText "," MOV e #1 WriteInt #1 WriteText "," MOV f #1 WriteInt #1 WriteText "," MOV g #1 WriteInt #1 WriteText "," MOV h #1 WriteInt #1 WriteText "," MOV i #1 WriteInt #1 WriteText "," MOV j #1 WriteInt #1 WriteText "," MOV k #1 WriteInt #1 WriteText ")\n" MOV a #1 MOV b #2 ADD #1 #2 #1 MOV c #2 ADD #1 #2 #1 MOV d #2 ADD #1 #2 #1 MOV e #2 ADD #1 #2 #1 MOV f #2 ADD #1 #2 #1 MOV g #2 ADD #1 #2 #1 MOV h #2 ADD #1 #2 #1 MOV i #2 ADD #1 #2 #1 MOV j #2 ADD #1 #2 #1 MOV k #2 ADD #1 #2 #1 MOV #1 ..return funload ..return deallocfunc 48 return L3: goto L17 L18: allocfunc 8 UNload ko allocfunc 8 MOV ko #1 MOV #1 #1 MOV #1 global MOV #1 #1 MOV #1 lokal deallocfunc 8 funload ..return deallocfunc 8 return L17: goto L19 L20: allocfunc 8 UNload ko allocfunc 4 MOV ko #1 MOV #1 #1 MOV #1 global MOV #1 #1 MOV #1 lokal deallocfunc 4 funload ..return deallocfunc 8 return L19: goto L21 L22: allocfunc 8 UNload ko allocfunc 4 MOV ko #1 MOV #1 #1 MOV #1 global MOV #1 #1 MOV #1 lokal deallocfunc 4 funload ..return deallocfunc 8 return L21: goto L24 L25: allocfunc 8 UNload ko allocfunc 4 goto L27 L28: allocfunc 8 UNload ko allocfunc 4 goto L29 L30: allocfunc 8 UNload ko WriteText "\t\t\tNivå 3\n" WriteText "\t\t\t-- Nu ändrar vi båda globala variabler.\n" WriteText "\t\t\t-- global1=ko (inparametern);\n\t\t\t-- global=137;\n" MOV ko #1 MOV #1 #1 MOV #1 global1 MOV 137 #1 MOV #1 #1 MOV #1 global WriteText "\t\t\t Den anropar vi funkonen med de många parametrarna\n" allochead MOV 11 #1 param #1 MOV 12 #1 param #1 MOV 13 #1 param #1 MOV 14 #1 param #1 MOV 15 #1 param #1 MOV 16 #1 param #1 MOV 17 #1 param #1 MOV 18 #1 param #1 MOV 19 #1 param #1 MOV 20 #1 param #1 MOV 21 #1 param #1 call param dealloc param funstore #1 WriteText "\t\t\t-- och retunerar ko² med: ~ ko*ko;\n" MOV ko #1 MOV ko #2 MUL #1 #2 #1 MOV #1 ..return funload ..return deallocfunc 8 return L29: WriteText "\t\tNivå 2\n" WriteText "\t\t-- Ändrar först på global1 innan vi kollar invärdet(global1=34)\n" MOV 34 #1 MOV #1 #1 MOV #1 global1 WriteText "\t\t-- Hur blev det?: global1=" MOV global1 #1 WriteInt #1 WriteText ",in parameter 1=" MOV ko #1 WriteInt #1 WriteText "\n" WriteText "\t\t-- Dax Att anropa inersta nivån. och retunerar ut svaret\n" WriteText "\t\t-- Innan anrop: global=" MOV global #1 WriteInt #1 WriteText ",Global1=" MOV global1 #1 WriteInt #1 WriteText "\n" WriteText "\t\t-- ~ Nästlad3(99);\n" allochead MOV 99 #1 param #1 call Nästlad3 dealloc Nästlad3 funstore #1 MOV #1 ..return WriteText "\t\t-- Efter anrop: global=" MOV global #1 WriteInt #1 WriteText ",Global1=" MOV global1 #1 WriteInt #1 WriteText "\n" deallocfunc 4 funload ..return deallocfunc 8 return L27: WriteText "\tNivå 1\n" WriteText "\t-- skapat en global variabel global1 och ger den värdet 12;\n" WriteText "\t-- Anropar sedan nästa nivå och tildelar global resultatet\n" WriteText "\t-- som inparameter har vi global1\n" MOV 12 #1 MOV #1 #1 MOV #1 global1 WriteText "\t-- Innan anrop: global=" MOV global #1 WriteInt #1 WriteText ",Global1=" MOV global1 #1 WriteInt #1 WriteText "\n" WriteText "\t-- global=Nästlad2(global1);\n" allochead MOV global1 #1 param #1 call Nästlad2 dealloc Nästlad2 funstore #1 MOV #1 #1 MOV #1 global WriteText "\t-- Efter anrop: global=" MOV global #1 WriteInt #1 WriteText ",Global1=" MOV global1 #1 WriteInt #1 WriteText "\n" WriteText "\t-- Visa dubbel returnering:\n" WriteText "\t-- ~314;\n" MOV 314 #1 MOV #1 ..return WriteText "\t-- ~1000000; Detta är också en stor konstant som inte rymms i en valig asmbler istruktion\n" MOV 1000000 #1 MOV #1 ..return deallocfunc 4 funload ..return deallocfunc 8 return L24: WriteText "Lite tester av programspråket Q:\n" allocfunc 4 WriteText "Test av en funktion med många in parametrar:\n" allochead MOV 1 #1 param #1 MOV 2 #1 param #1 MOV 3 #1 param #1 MOV 4 #1 param #1 MOV 5 #1 param #1 MOV 6 #1 param #1 MOV 7 #1 param #1 MOV 8 #1 param #1 MOV 9 #1 param #1 MOV 10 #1 param #1 MOV 11 #1 param #1 call param dealloc param funstore #1 MOV #1 #1 MOV #1 a WriteText "Och retunerar summan:" MOV a #1 WriteInt #1 WriteText "\n" deallocfunc 4 WriteText "Test av globala och lokala variabler:lokal=global=1;\n" MOV 1 #1 MOV #1 #1 MOV #1 global MOV #1 #1 MOV #1 lokal WriteText "Lokal:" MOV lokal #1 WriteInt #1 WriteText ",Global:" MOV global #1 WriteInt #1 WriteText "\n" WriteText "FuskGlobal(12); Här finns båda variablerna deklarerade lokalt så dom ska ej påvärkas\n" allochead MOV 12 #1 param #1 call FuskGlobal dealloc FuskGlobal funstore #1 WriteText "Lokal:" MOV lokal #1 WriteInt #1 WriteText ",Global:" MOV global #1 WriteInt #1 WriteText "\n" WriteText "RiktigGlobal(13); Här finns endast lokal variabeln deklarerade så den globala kommer att ändras\n" allochead MOV 13 #1 param #1 call RiktigGlobal dealloc RiktigGlobal funstore #1 WriteText "Lokal:" MOV lokal #1 WriteInt #1 WriteText ",Global:" MOV global #1 WriteInt #1 WriteText "\n" WriteText "EgenGlobal(14); Här är global deklarerad igen fast nu globalt, den blir" WriteText " då endast global för den nivån och neråt" WriteText " så den kommer ej att påverkas global\n" allochead MOV 14 #1 param #1 call EgenGlobal dealloc EgenGlobal funstore #1 WriteText "Lokal:" MOV lokal #1 WriteInt #1 WriteText ",Global:" MOV global #1 WriteInt #1 WriteText "\n" MOV 333 #1 MOV #1 #1 MOV #1 global1 WriteText "Dax att testa lite nivåer jag ska nu anropa en procedure som har egna procedurer;\n" WriteText "För att ytterliga visa globala id:s och Egen-globala så har vi två globala från början nämligen global och global1\n" WriteText "Innan anrop: global=" MOV global #1 WriteInt #1 WriteText ",global1=" MOV global1 #1 WriteInt #1 WriteText "\n" WriteText "a=Nästlad(12);\n" allochead MOV 12 #1 param #1 call Nästlad dealloc Nästlad funstore #1 MOV #1 #1 MOV #1 a WriteText "a=" MOV a #1 WriteInt #1 WriteText " som syns är det den senaste som kommer fram\n" WriteText "Efter anrop: global=" MOV global #1 WriteInt #1 WriteText ",global1=" MOV global1 #1 WriteInt #1 WriteText " som syns har global1 inte ändrat sig.\n" deallocfunc 8 -------------------------------- test.s ---------------------------------------- -------------------------------------------------------------------------------- .seg "data" .skip 4096 stack: .word 0 L1: .word 0 L2: .word 0 L5: .asciz "\tparam(" .align 4 L6: .asciz "," .align 4 L7: .asciz "," .align 4 L8: .asciz "," .align 4 L9: .asciz "," .align 4 L10: .asciz "," .align 4 L11: .asciz "," .align 4 L12: .asciz "," .align 4 L13: .asciz "," .align 4 L14: .asciz "," .align 4 L15: .asciz "," .align 4 L16: .asciz ")\n" .align 4 L23: .word 0 L26: .word 0 L31: .asciz "\t\t\tNivå 3\n" .align 4 L32: .asciz "\t\t\t-- Nu ändrar vi båda globala variabler.\n" .align 4 L33: .asciz "\t\t\t-- global1=ko (inparametern);\n\t\t\t-- global=137;\n" .align 4 L34: .asciz "\t\t\t Den anropar vi funkonen med de många parametrarna\n" .align 4 L35: .asciz "\t\t\t-- och retunerar ko² med: ~ ko*ko;\n" .align 4 L36: .asciz "\t\tNivå 2\n" .align 4 L37: .asciz "\t\t-- Ändrar först på global1 innan vi kollar invärdet(global1=34)\n" .align 4 L38: .asciz "\t\t-- Hur blev det?: global1=" .align 4 L39: .asciz ",in parameter 1=" .align 4 L40: .asciz "\n" .align 4 L41: .asciz "\t\t-- Dax Att anropa inersta nivån. och retunerar ut svaret\n" .align 4 L42: .asciz "\t\t-- Innan anrop: global=" .align 4 L43: .asciz ",Global1=" .align 4 L44: .asciz "\n" .align 4 L45: .asciz "\t\t-- ~ Nästlad3(99);\n" .align 4 L46: .asciz "\t\t-- Efter anrop: global=" .align 4 L47: .asciz ",Global1=" .align 4 L48: .asciz "\n" .align 4 L49: .asciz "\tNivå 1\n" .align 4 L50: .asciz "\t-- skapat en global variabel global1 och ger den värdet 12;\n" .align 4 L51: .asciz "\t-- Anropar sedan nästa nivå och tildelar global resultatet\n" .align 4 L52: .asciz "\t-- som inparameter har vi global1\n" .align 4 L53: .asciz "\t-- Innan anrop: global=" .align 4 L54: .asciz ",Global1=" .align 4 L55: .asciz "\n" .align 4 L56: .asciz "\t-- global=Nästlad2(global1);\n" .align 4 L57: .asciz "\t-- Efter anrop: global=" .align 4 L58: .asciz ",Global1=" .align 4 L59: .asciz "\n" .align 4 L60: .asciz "\t-- Visa dubbel returnering:\n" .align 4 L61: .asciz "\t-- ~314;\n" .align 4 L62: .asciz "\t-- ~1000000; Detta är också en stor konstant som inte rymms i en valig asmbler istruktion\n" .align 4 L63: .word 1000000 L64: .asciz "Lite tester av programspråket Q:\n" .align 4 L65: .asciz "Test av en funktion med många in parametrar:\n" .align 4 L66: .asciz "Och retunerar summan:" .align 4 L67: .asciz "\n" .align 4 L68: .asciz "Test av globala och lokala variabler:lokal=global=1;\n" .align 4 L69: .asciz "Lokal:" .align 4 L70: .asciz ",Global:" .align 4 L71: .asciz "\n" .align 4 L72: .asciz "FuskGlobal(12); Här finns båda variablerna deklarerade lokalt så dom ska ej påvärkas\n" .align 4 L73: .asciz "Lokal:" .align 4 L74: .asciz ",Global:" .align 4 L75: .asciz "\n" .align 4 L76: .asciz "RiktigGlobal(13); Här finns endast lokal variabeln deklarerade så den globala kommer att ändras\n" .align 4 L77: .asciz "Lokal:" .align 4 L78: .asciz ",Global:" .align 4 L79: .asciz "\n" .align 4 L80: .asciz "EgenGlobal(14); Här är global deklarerad igen fast nu globalt, den blir" .align 4 L81: .asciz " då endast global för den nivån och neråt" .align 4 L82: .asciz " så den kommer ej att påverkas global\n" .align 4 L83: .asciz "Lokal:" .align 4 L84: .asciz ",Global:" .align 4 L85: .asciz "\n" .align 4 L86: .asciz "Dax att testa lite nivåer jag ska nu anropa en procedure som har egna procedurer;\n" .align 4 L87: .asciz "För att ytterliga visa globala id:s och Egen-globala så har vi två globala från början nämligen global och global1\n" .align 4 L88: .asciz "Innan anrop: global=" .align 4 L89: .asciz ",global1=" .align 4 L90: .asciz "\n" .align 4 L91: .asciz "a=Nästlad(12);\n" .align 4 L92: .asciz "a=" .align 4 L93: .asciz " som syns är det den senaste som kommer fram\n" .align 4 L94: .asciz "Efter anrop: global=" .align 4 L95: .asciz ",global1=" .align 4 L96: .asciz " som syns har global1 inte ändrat sig.\n" .align 4 .seg "text" .global main main: set stack,%g7 ! %g7 till stacken !-- Programmet. sub %g7,8,%g7 ! allocfunc set L3,%i5 !GOTO jmp %i5 nop L4: sub %g7,48,%g7 ! allocfunc st %i0,[%g7+48] st %i1,[%g7+44] st %i2,[%g7+40] st %i3,[%g7+36] st %i4,[%g7+32] st %o1,[%g7+28] st %o2,[%g7+24] st %i7,[%g7+20] st %o3,[%g7+16] st %o4,[%g7+12] st %o5,[%g7+8] set L5,%o0 call writestring nop ld [%g7+48],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L6,%o0 call writestring nop ld [%g7+44],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L7,%o0 call writestring nop ld [%g7+40],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L8,%o0 call writestring nop ld [%g7+36],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L9,%o0 call writestring nop ld [%g7+32],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L10,%o0 call writestring nop ld [%g7+28],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L11,%o0 call writestring nop ld [%g7+24],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L12,%o0 call writestring nop ld [%g7+20],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L13,%o0 call writestring nop ld [%g7+16],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L14,%o0 call writestring nop ld [%g7+12],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L15,%o0 call writestring nop ld [%g7+8],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L16,%o0 call writestring nop ld [%g7+48],%l0 ld [%g7+44],%l1 add %l0,%l1,%l0 ld [%g7+40],%l1 add %l0,%l1,%l0 ld [%g7+36],%l1 add %l0,%l1,%l0 ld [%g7+32],%l1 add %l0,%l1,%l0 ld [%g7+28],%l1 add %l0,%l1,%l0 ld [%g7+24],%l1 add %l0,%l1,%l0 ld [%g7+20],%l1 add %l0,%l1,%l0 ld [%g7+16],%l1 add %l0,%l1,%l0 ld [%g7+12],%l1 add %l0,%l1,%l0 ld [%g7+8],%l1 add %l0,%l1,%l0 st %l0,[%g7+4] ld [%g7+4],%o0 add %g7,48,%g7 ! Deallocfunc ld [%g7+4],%i5 jmp %i5 add %g7,4,%g7 L3: set L17,%i5 !GOTO jmp %i5 nop L18: sub %g7,8,%g7 ! allocfunc st %i0,[%g7+8] sub %g7,8,%g7 ! allocfunc ld [%g7+16],%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+4] ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+8] add %g7,8,%g7 ! Deallocfunc ld [%g7+4],%o0 add %g7,8,%g7 ! Deallocfunc ld [%g7+4],%i5 jmp %i5 add %g7,4,%g7 L17: set L19,%i5 !GOTO jmp %i5 nop L20: sub %g7,8,%g7 ! allocfunc st %i0,[%g7+8] sub %g7,4,%g7 ! allocfunc ld [%g7+12],%l0 ! mov %l0,%l0---------------------Removed a move, Optimized set L1,%i5 st %l0,[%i5] ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+4] add %g7,4,%g7 ! Deallocfunc ld [%g7+4],%o0 add %g7,8,%g7 ! Deallocfunc ld [%g7+4],%i5 jmp %i5 add %g7,4,%g7 L19: set L21,%i5 !GOTO jmp %i5 nop L22: sub %g7,8,%g7 ! allocfunc st %i0,[%g7+8] sub %g7,4,%g7 ! allocfunc ld [%g7+12],%l0 ! mov %l0,%l0---------------------Removed a move, Optimized set L23,%i5 st %l0,[%i5] ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+4] add %g7,4,%g7 ! Deallocfunc ld [%g7+4],%o0 add %g7,8,%g7 ! Deallocfunc ld [%g7+4],%i5 jmp %i5 add %g7,4,%g7 L21: set L24,%i5 !GOTO jmp %i5 nop L25: sub %g7,8,%g7 ! allocfunc st %i0,[%g7+8] sub %g7,4,%g7 ! allocfunc set L27,%i5 !GOTO jmp %i5 nop L28: sub %g7,8,%g7 ! allocfunc st %i0,[%g7+8] sub %g7,4,%g7 ! allocfunc set L29,%i5 !GOTO jmp %i5 nop L30: sub %g7,8,%g7 ! allocfunc st %i0,[%g7+8] set L31,%o0 call writestring nop set L32,%o0 call writestring nop set L33,%o0 call writestring nop ld [%g7+8],%l0 ! mov %l0,%l0---------------------Removed a move, Optimized set L26,%i5 st %l0,[%i5] mov 137,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized set L1,%i5 st %l0,[%i5] set L34,%o0 call writestring nop sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 mov 11,%l0 mov %l0,%i0 mov 12,%l0 mov %l0,%i1 mov 13,%l0 mov %l0,%i2 mov 14,%l0 mov %l0,%i3 mov 15,%l0 mov %l0,%i4 mov 16,%l0 mov %l0,%o1 mov 17,%l0 mov %l0,%o2 mov 18,%l0 mov %l0,%i7 mov 19,%l0 mov %l0,%o3 mov 20,%l0 mov %l0,%o4 mov 21,%l0 mov %l0,%o5 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L4,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l0 set L35,%o0 call writestring nop ld [%g7+8],%l0 ld [%g7+8],%l1 mov %l0,%o0 mov %l1,%o1 call .mul nop mov %o0,%l0 st %l0,[%g7+4] ld [%g7+4],%o0 add %g7,8,%g7 ! Deallocfunc ld [%g7+4],%i5 jmp %i5 add %g7,4,%g7 L29: set L36,%o0 call writestring nop set L37,%o0 call writestring nop mov 34,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized set L26,%i5 st %l0,[%i5] set L38,%o0 call writestring nop set L26,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L39,%o0 call writestring nop ld [%g7+12],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L40,%o0 call writestring nop set L41,%o0 call writestring nop set L42,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L43,%o0 call writestring nop set L26,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L44,%o0 call writestring nop set L45,%o0 call writestring nop sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 mov 99,%l0 mov %l0,%i0 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L30,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l0 st %l0,[%g7+8] set L46,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L47,%o0 call writestring nop set L26,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L48,%o0 call writestring nop add %g7,4,%g7 ! Deallocfunc ld [%g7+4],%o0 add %g7,8,%g7 ! Deallocfunc ld [%g7+4],%i5 jmp %i5 add %g7,4,%g7 L27: set L49,%o0 call writestring nop set L50,%o0 call writestring nop set L51,%o0 call writestring nop set L52,%o0 call writestring nop mov 12,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized set L26,%i5 st %l0,[%i5] set L53,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L54,%o0 call writestring nop set L26,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L55,%o0 call writestring nop set L56,%o0 call writestring nop sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 set L26,%i5 ld [%i5],%l0 mov %l0,%i0 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L28,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized set L1,%i5 st %l0,[%i5] set L57,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L58,%o0 call writestring nop set L26,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L59,%o0 call writestring nop set L60,%o0 call writestring nop set L61,%o0 call writestring nop mov 314,%l0 st %l0,[%g7+8] set L62,%o0 call writestring nop set L63,%i5 ld [%i5],%l0 st %l0,[%g7+8] add %g7,4,%g7 ! Deallocfunc ld [%g7+4],%o0 add %g7,8,%g7 ! Deallocfunc ld [%g7+4],%i5 jmp %i5 add %g7,4,%g7 L24: set L64,%o0 call writestring nop sub %g7,4,%g7 ! allocfunc set L65,%o0 call writestring nop sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 mov 1,%l0 mov %l0,%i0 mov 2,%l0 mov %l0,%i1 mov 3,%l0 mov %l0,%i2 mov 4,%l0 mov %l0,%i3 mov 5,%l0 mov %l0,%i4 mov 6,%l0 mov %l0,%o1 mov 7,%l0 mov %l0,%o2 mov 8,%l0 mov %l0,%i7 mov 9,%l0 mov %l0,%o3 mov 10,%l0 mov %l0,%o4 mov 11,%l0 mov %l0,%o5 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L4,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+4] set L66,%o0 call writestring nop ld [%g7+4],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L67,%o0 call writestring nop add %g7,4,%g7 ! Deallocfunc set L68,%o0 call writestring nop mov 1,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized set L1,%i5 st %l0,[%i5] ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+8] set L69,%o0 call writestring nop ld [%g7+8],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L70,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L71,%o0 call writestring nop set L72,%o0 call writestring nop sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 mov 12,%l0 mov %l0,%i0 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L18,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l0 set L73,%o0 call writestring nop ld [%g7+8],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L74,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L75,%o0 call writestring nop set L76,%o0 call writestring nop sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 mov 13,%l0 mov %l0,%i0 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L20,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l0 set L77,%o0 call writestring nop ld [%g7+8],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L78,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L79,%o0 call writestring nop set L80,%o0 call writestring nop set L81,%o0 call writestring nop set L82,%o0 call writestring nop sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 mov 14,%l0 mov %l0,%i0 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L22,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l0 set L83,%o0 call writestring nop ld [%g7+8],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L84,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L85,%o0 call writestring nop mov 333,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized set L2,%i5 st %l0,[%i5] set L86,%o0 call writestring nop set L87,%o0 call writestring nop set L88,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L89,%o0 call writestring nop set L2,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L90,%o0 call writestring nop set L91,%o0 call writestring nop sub %g7,56,%g7 st %l0,[%g7+0] st %l1,[%g7+4] st %l2,[%g7+8] st %l3,[%g7+12] st %l4,[%g7+16] st %l5,[%g7+20] st %l6,[%g7+24] st %l7,[%g7+28] st %g1,[%g7+32] st %g2,[%g7+36] st %g3,[%g7+40] st %g4,[%g7+44] st %g5,[%g7+48] st %g6,[%g7+52] add %g7,56,%g7 mov 12,%l0 mov %l0,%i0 sub %g7,60,%g7 set 1f,%g5 st %g5,[%g7] set L25,%g5 jmp %g5 sub %g7,4,%g7 1: ld [%g7+4],%l0 ld [%g7+8],%l1 ld [%g7+12],%l2 ld [%g7+16],%l3 ld [%g7+20],%l4 ld [%g7+24],%l5 ld [%g7+28],%l6 ld [%g7+32],%l7 ld [%g7+36],%g1 ld [%g7+40],%g2 ld [%g7+44],%g3 ld [%g7+48],%g4 ld [%g7+52],%g5 ld [%g7+56],%g6 add %g7,60,%g7 mov %o0,%l0 ! mov %l0,%l0---------------------Removed a move, Optimized st %l0,[%g7+4] set L92,%o0 call writestring nop ld [%g7+4],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L93,%o0 call writestring nop set L94,%o0 call writestring nop set L1,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L95,%o0 call writestring nop set L2,%i5 ld [%i5],%l0 mov %l0,%o0 mov 0,%o1 call writeint nop set L96,%o0 call writestring nop add %g7,8,%g7 ! Deallocfunc call _exit nop