The way the question is worded, it sounds like you already have two frames A and B (which are orthonormal bases) readily available, which would make the points redundant.
[ If you only have the points, as long as they're not collinear, you can always construct an ONB from either of them: have vector u going from P1 to P2 and v from P1 to P3, then i = u/|u|; j = uxv, j = j/|j|; k = ixj; and your base is (i,j,k). ]
Since A is a transform from the common "neutral" coordinate system to the A coordinate system, multiplying with the inverse of A will be a transform back to the common coordinate system. In this case, A is an ONB, so "inverse" and "transpose" are synonyms, which makes your life a lot easier.
Similarly, B transforms from the neutral coordinate system to the B coordinate system.
So, to transform any point from A to B, you multiply it with AT and then with B. You can multiply the matrices together to do the transform in one step if you have to transform many points.
Note that if you do this in a computer program, the transpose actually saves you computional effort rather than adding some, if you are wise while multiplying the matrices together (not the naive route of calling transpose() first and then multiply()).
Multiplying two matrices can be seen as taking dot products of rows and columns. Or, if you look at it this way, dot products of rows and transposed rows. Which makes multiplying a transposed matrix look a lot nicer, because now it maps perfectly to SIMD instructions and memory layout.