It could be either. The only way to tell is to take out the gauge cluster and spin the back of it by hand see if the needle moves (My guess if it sits on 20 it is the speedo). If it does spin and the needle moves then it could be the cable.
I have take apart several speedos and usually there is small bits of rust/metal that lodge themselves to the magnet that is in there. If you are a detail person it is not that hard to do. The most difficult part is taking off the needle of the speedo. The easiest way that I have found is to take a fork and bend two of the tines close together put it under the needle and carefully pry up and it should pop off. Then remove the two screws that hold the face of the guage on and the it is just a few more screws and it will be apart.