| 123456789101112131415161718192021222324252627 | .var flag
.var count
.main
.top
.acquire
mov  flag, %ax      # get flag
test $0, %ax        # if we get 0 back: lock is free!
jne  .acquire       # if not, try again
mov  $1, flag       # store 1 into flag
# critical section
mov  count, %ax     # get the value at the address
add  $1, %ax        # increment it
mov  %ax, count     # store it back
# release lock
mov  $0, flag       # clear the flag now
# see if we're still looping
sub  $1, %bx
test $0, %bx
jgt .top	
halt
 |