Zaman and Ali add 45 runs together for the first wicket, with the former scoring the bulk of those runs.
They were completing a remarkable turnaround after losing so heavily 10 days ago to India, who will bid to join them in the final when they take on Bangladesh in Birmingham on Thursday.
England have won 12 of their last 14 meetings with Pakistan in ODIs (L2); they did lose their most recent encounter however (4th September 2016), that game taking place at this very venue in Cardiff.
For Pakistan, strike early with the ball and they must take every opportunity given to them.
Morgan insisted that England will continue to play with attacking intent, saying: "I think it's been reassuring that we've got to the semi-final by playing in our own way". The southpaw ended hitting seven fours and a six, that came off a top edge over the wicketkeeper.
Pakistan: Sarfraz Khan (c and wk), Ahmed Shehzad, Azhar Ali, Babar Azam, Faheem Ashraf, Fakhar Zaman, Haris Sohail, Hasan Ali, Imad Wasim, Junaid Khan, Mohammed Amir, Mohammed Hafeez, Shadab Khan and Shoaib Malik. England suffered a batting collapse as they bundled out for 211 with 1 ball to spare.
Rumman Raees also bowled brilliantly for his43/2 in his 9 overs. Chasing 237 against Sri Lanka, Pakistan looked comfortable at 92 for one but once again the middle order collapse nearly costed them a chance in the semi-final and were reduced to 162 for seven before Sarfraz and Mohammad Amir took them past the line with a spirited eighth wicket stand.
England had scored over 300 in five of the last six one-day internationals in which they batted first.
England made one change from the team which beat Australia in the group stage, bringing in Bairstow for out-of-form opener Jason Roy. Bairstow opened the batting for the first time, and survived a close-call for leg-before in the first over and two dropped chances afterward. Hasan Ali has picked up the crucial wickets, and comeback man Junaid Khan has filled the void left by enforcer Wahab Riaz. Skipper Eoin Morgan along with Joe Root, Ben Stokes and other are in good touch. The 48-run stand for the third wicket was broken by 18-year-old spinner, Shadab Khan, in the 28th over.
Looking to cut the ball, Root nicked it to wicketkeeper Sarfraz, as England were reduced to 128 for three. On a slow Sophia Gardens pitch, he stifled England by hitting intelligent lengths, tight lines, getting the ball to nip just enough both ways, and, towards the end, finding reverse swing.