Midfielder Danny Guthrie bagged a brace at the Madejski Stadium to extend Reading's unbeaten run in the Championship to five games.
The 26-year-old scored direct from a free kick in each half to condemn Birmingham City to an away defeat.
The home side started well and Pavel Pogrebnyak's early strike was palmed away by Birmingham keeper Darren Randolph after the Russian was slipped in by Garath McCleary.
Chris Baird then went close for Reading but his header from a corner just missed the target, before McCleary was again involved, this time shooting wide from the edge of the box after receiving Pogrebnyak's lay-off.
The home side made their dominance pay just after the half-hour mark when Guthrie curled a free kick from the left, which evaded everyone and nestled into the corner.
Adam Le Fondre came close to doubling the lead when he raced onto a through-ball and beat Randolph to it, but could only send his effort over the bar.
Jesse Lingard then set up Tom Adeyemi whose thumping strike from 25 yards was well saved by McCarthy, safely seeing Reading through to a deserved half-time lead.
The first chance after the restart fell to Chris Burke, but the midfielder could not control his volley after David Murphy's cross from the left.
Randolph then made a strong save on 64 minutes to keep out McCleary's deflected shot from range.
Birmingham manager Lee Clark made the first change of the game as Nikola Zigic came on for Matt Green to make his first appearance of the season after recovering from a back injury.
The giant striker almost had an immediate impact, but the Serbian could only head Murphy's cross over the bar, before the tricky Burke blasted over from the edge of the area after some good footwork to create the chance.
With a Birmingham equaliser looking increasingly likely, Reading doubled their advantage against the run of play as Guthrie scored his second of the game.
The midfielder curled another free kick agonisingly away from Randolph with a little more purpose than his first-half effort to effectively kill the tie.
Ten minutes from time McCleary had to be withdrawn after picking up a knock, the only sour note in an otherwise excellent result for Nigel Adkins's side.