Watch Pakistan beat England by eight wickets to reach the final of the ICC Champions Trophy.

Resurgent Pakistan powered to an eight-wicket win over England at Cardiff to knock the hosts out of the ICC Champions Trophy at the semi-final stage.

Sarfraz Ahmed's side booked their place in Sunday's final, where they will face the winner of Thursday's clash between Bangladesh and India, by bowling pre-tournament favourites England out for 211 in 49.5 overs and then knocking off the target in just 37.1 overs in a near-flawless display.

Openers Fakhar Zaman (57) and Azhar Ali (76) put on 118 to drive home the impact of a disciplined bowling display led by Golden Ball front-runner Hassan Ali (3-35) and fellow seamer Junaid Khan (2-38), as England struggled for fluency after being put in on a used pitch.

Eoin Morgan's side failed to hit a six in their innings for the first time since their humiliating defeat to New Zealand in the 2015 World Cup, the catalyst for the team's new brand of positive cricket which had earned them 11 wins in 12 ODIs.

Eoin Morgan says England must learn how to play knockout cricket

While England's wait for a first global 50-over title goes on, Pakistan - beaten so convincingly by India just 10 days ago - now have the chance to further belie their eighth-place ICC ranking and claim their maiden ICC Champions Trophy crown with one more win.

The home side looked well-placed at 80-1 and then 128-2 but lost eight wickets for 83 runs, including Joe Root (46), Eoin Morgan (33) and Jos Buttler (four) in the space of 20 runs, to set a mediocre target on a ground where they lost to Pakistan in 2016 despite scoring 302-9.

Recalled Jonny Bairstow, opening in ODI cricket for the first time at the expense of out-of-form Jason Roy, struck 43 off 57 balls after surviving a review for lbw off just his second ball and benefiting from drops on 27 and 42.

The Yorkshireman helped lay a solid platform in partnership with Root after Alex Hales (13) had fallen to debutant Rumman Raees, playing in place of an injured Mohammad Amir, before miscuing a front-foot pull off Hassan.

Thereafter England got bogged down - Root snicked Shadab Khan behind on the cut and Morgan, dropped down the leg-side by Sarfraz on eight, drove loosely at Hassan and snicked through - the skipper falling for 33 off 53 balls after becoming only the third England batsman behind Ian Bell and Paul Collingwood to notch up 5,000 ODI runs.

Trevor Bayliss admits England are far from the finished article

When Buttler (four) feathered the first ball after drinks from Junaid Khan behind and Moeen Ali top-edged a pull off Junaid to deep square, where Fakhar took a fine diving catch, the onus fell firmly on Ben Stokes to set a competitive total.

The all-rounder played circumspectly without hitting a boundary in his 64 ball innings and continued to pick out the fielders after Adil Rashid was run out by a direct hit from substitute Ahmed Shehzad.

So spectacular was England's demise that Pakistan didn't concede a boundary between the 39th and 48th over - Liam Plunkett breaking the barren run with an edged four off Raees.

In contrast, Pakistan struck a six in the first innings of their reply - all be it off a top-edge as Fakhar attempted to pull Mark Wood. The left-hander continued to take on the short ball, riding his luck at times, on his way to a second fifty in as many games.

England's tactics already looked predictable by the time Azhar miscued a pull off Stokes' first ball in the 13th over for six more, going on to reach his fifty off 68 balls - 19 more than the flamboyant Fakhar who finally fell stumped while looking to launch Rashid.

By the time England claimed a second wicket - Azhar dragging a slower-ball bouncer from Jake Ball into his wicket - Pakistan required just 39 runs to win.

Mohammad Hafeez struck six of those over long off one delivery after yorking himself as he came down the track, only to earn a reprieve as Buttler this time missed the stumping, before sealing victory by pulling Stokes emphatically for four.

Watch the second ICC Champions Trophy semi-final, between Bangladesh and India, live on Sky Sports 2 from 10am on Thursday.