28 lines
480 B
ArmAsm
28 lines
480 B
ArmAsm
.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
|
|
|