Python 3.11, 92 86 85 8562 bytes
This is my answer, so don't suggest copying from other answers.
def f(p,i=0):
while i in range(len(p)):p[k:=p[i+1]]-=p[p[i]];i==p[p[i]];f(p,(i+3, p[i+2])[p[k]<1])
Attempt This Online!Attempt This Online!
Takes in a program as a list, mutates the original list with an error (you need a variable and try/except to access the results).
Explanation:
def f(p,i=0):
Define the main function, p is the program to be ran and initialize the instruction pointer as i.
while i in range(len(p)):
Loop until i is outside the list.
p[k:=p[i+1]]-=p[p[i]];
Subtract A from B and store in B. Also assigns B as k to shave off bytes.
i=f(p,(i+3,p[i+2])[p[k]<1])
If B is less than 1, then setrecursively call with i toas C, otherwise add 3.