Jump always, but remember where to return. We perform the operation on each pair of bits. Add two numbers, taken from memory. The CPU has no idea that addresses 5-7 are data, so if you forget the halt , it will interpret them as instructions. We need to move the data to a new address, and change all references.
Assemblers allow symbolic addresses.
Gap will automatically find the address for you. Register numbers aren't meaningful, we should use names. At one time, it was the only language It is usually faster than other languages. You can do things you can't do in other languages. E.g. timing critical functions.