/* hand written assembly version of counter loop program */ /* (my second SPARC assembly program!!) */ .global main str0: .asciz "The value of COUNTER is now %d\n"; ! store string in RAM .align 4 ! align on 32 bit word boundary str1: .asciz "End\n" .align 4 ! every instruction is 4 bytes! main: mov 1, %l0 ! use register l0 for COUNTER sethi %hi(str0), %l1 ! load address of str0 into l1 or %l1,%lo(str0), %l1 .loop: mov %l1, %o0 ! prepare out register o0 for 'call' mov %l0, %o1 ! move COUNTER into out register call printf ! cheat and use C nop ! pipeline delay slot add %l0,1,%l0 ! COUNTER = COUNTER + 1 cmp %l0,11 ! compare COUNTER with 11; set flags bne .loop ! branch if != to .loop nop ! pipeline delay slot sethi %hi(str1),%o0 ! print "End" message when done or %o1,%lo(str1),%o0 call printf nop mov 1, %g1 ! trap to OS ta 0