! + Syscalls have number in %g1, options in %o0,%o1,... ! Result returned in %o0 ! Linux syscall is called by "ta 0x10" .equ SYSCALL_EXIT,1 .equ SYSCALL_WRITE,4 .equ STDOUT,1 .globl _start _start: nop label: set 0x41410a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! AA nop save %sp,-96,%sp set 0x42420a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! BB nop save %sp,-96,%sp set 0x43430a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! CC nop save %sp,-96,%sp set 0x44440a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! DD nop save %sp,-96,%sp set 0x45450a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! EE nop save %sp,-96,%sp set 0x46460a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! FF nop save %sp,-96,%sp set 0x47470a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! GG nop save %sp,-96,%sp set 0x48480a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! HH nop save %sp,-96,%sp set 0x49490a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! II nop save %sp,-96,%sp set 0x4a4a0a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! JJ nop save %sp,-96,%sp set 0x4b4b0a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! KK nop save %sp,-96,%sp set 0x4c4c0a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! LL nop save %sp,-96,%sp set 0x4d4d0a00,%l0 set out_string,%o1 st %l0,[%o1] call write_stdout ! MM nop ! flushw sparc9 only restore set out_string,%o1 st %l0,[%o1] call write_stdout ! LL nop restore set out_string,%o1 st %l0,[%o1] call write_stdout ! KK nop restore set out_string,%o1 st %l0,[%o1] call write_stdout ! JJ nop restore set out_string,%o1 st %l0,[%o1] call write_stdout ! II nop ta 3 restore set out_string,%o1 st %l0,[%o1] call write_stdout nop restore set out_string,%o1 st %l0,[%o1] call write_stdout nop restore set out_string,%o1 st %l0,[%o1] call write_stdout nop restore set out_string,%o1 st %l0,[%o1] call write_stdout nop restore set out_string,%o1 st %l0,[%o1] call write_stdout nop restore set out_string,%o1 st %l0,[%o1] call write_stdout nop restore set out_string,%o1 st %l0,[%o1] call write_stdout nop restore set out_string,%o1 st %l0,[%o1] call write_stdout nop nop nop nop exit: mov 0,%o0 ! exit value mov SYSCALL_EXIT,%g1 ! put the exit syscall number in g1 ta 0x10 ! and exit #================================ # WRITE_STDOUT #================================ # %o1 has string write_stdout: set SYSCALL_WRITE,%g1 ! Write syscall in %g1 set STDOUT,%o0 ! 1 in %o0 (stdout) set 0,%o2 ! 0 (count) in %o2 str_loop1: ldub [%o1+%o2],%l1 ! load byte cmp %l1,%g0 ! compare against zero bnz str_loop1 ! if not nul, repeat # BRANCH DELAY SLOT inc %o2 ! increment count dec %o2 ! correct count ta 0x10 ! run the syscall retl nop !=========================================================================== .data !=========================================================================== data_region: .int -1,-1 out_string: .int 0