It was a sixth successive defeat for City and was the final blow to Holden’s hopes of hanging onto his job as head coach.
Joao was allowed time to control Michael Olise’s 42nd-minute free-kick from the right before coolly slotting his 20th goal of the season with a right-footed finish from eight yards.
And three minutes later Morrison exchanged passes with Joao on the edge of the box before eluding some weak challenges to force the ball past Daniel Bentley from close range.
Reading had opportunities to increase their lead after the break, while lifeless City barely created a worthwhile chance.
Owner Steve Lansdown had warned before the game that a rapid transformation in form was necessary if changes were not to be implemented.
Reading boss Veljko Paunovic made the same number of changes following his side’s 2-1 home defeat by Millwall, selecting Andy Yiadom, Tomas Esteves and Omar Richards instead of Tom Holmes, Josh Laurent and Lewis Gibson.
Neither side were able to create much in a mistake-prone opening half-hour, but Reading looked the more threatening with Omar Richards having a shot deflected wide.
From the resulting corner, Olise’s shot was blocked. At the other end there was nothing to test goalkeeper Rafael Cabral as City worked hard to little effect.
Then came the two goals in three minutes and Holden left the dug-out at half-time knowing his job was hanging by a thread.
But soon Reading were looking the more dangerous side again. Holden reacted by sending on Semenyo, Kasey Palmer and Tyreeq Bakinson on 66 minutes, withdrawing Jamie Paterson, Henri Lansbury and Zak Vyner.
Still it was the visitors dominating as an Esteves shot was blocked and Bentley produced a good save to keep out Tom McIntyre’s near-post flick.
Reading looked every inch promotion contenders, while City, badly hit by injuries, have totally lost their way after a bright start to the season.