; mos ; use semaphore for ; process synchronization ; 15 Apr 2016 ; update 19 Feb 2017 ; p1() ; for i = 0..4 ; wait(sem1) **** sync ; signal(sem2) ; print i ; p2() ; for i = 10..14 ; wait(sem2) **** sync ; signal(sem1) ; print i ; ... put mos here ..... ; ------------- user program ----------- ; p1() ; i = 0 ; while i < 5 ; wait(sem1) ; signal(sem2) ; print i ; i++ :process1 ; count 1..4 mov r2 r0 ; r2 : i :loop3 ld r1 sem1 ; sync trap r1 #wait ld r1 sem2 trap r1 #signal lt r3 r2 #5 ; i < 5 ? jf r3 exit3 mov r1 r2 trap r1 #print1 add r2 r2 #1 jmp loop3 :exit3 jal link terminate int #0 ; p2() ; i = 10 ; while i < 15 ; wait(sem2) ; signal(sem1) ; print i ; i++ :process2 ; count 10..14 mov r2 #10 ; r2 : i :loop4 ld r1 sem2 ; sync trap r1 wait ld r1 sem1 trap r1 #signal lt r3 r2 #15 ; i < 15 ? jf r3 exit4 mov r1 r2 trap r1 #print2 add r2 r2 #1 jmp loop4 :exit4 jal link terminate int #0 .data 200 .end