The Sri Lankan left-arm pace bowler shattered Zimbabwe's top order when he removed Trevor Gripper, Murray Goodwin and Neil Johnson with the first three balls of the second over of the match before the home side had a run on the scoreboard.
A dogged 74 by captain Andy Flower enabled Zimbabwe to stage a partial recovery but he was dismissed shortly before the close by paceman Chaminda Vaas after a 332-minute innings in which he faced 224 balls and hit five fours and a six.
Zoysa, returning from a back injury to play in his eighth Test, made full use of a helpful pitch after Sri Lanka won the toss and sent Zimbabwe in to bat.
After Zoysa's hat-trick, the first by a Sri Lankan in a Test, Andy Flower began the recovery with a 53-run partnership with his brother Grant (19) and then added 80 for the fifth wicket with Alistair Campbell, who made 36. That stand was ended 40 minutes into the final session when Pramodya Wickramasinghe had Campbell leg before.
Guy Whittall was then bowled by Muralitharan for one, before Gary Brent, Andy Flower and Bryan Strang all fell to Vaas, who claimed his 100th Test wicket with Strang's dismissal.
First day of five; Sri Lanka won toss
ZIMBABWE - First Innings
G W Flower b Muralitharan 19
T R Gripper lbw b Zoysa 0
M W Goodwin c Kaluwitharana b Zoysa 0
N C Johnson lbw b Zoysa 0
*A Flower lbw b Vaas 74
A D R Campbell lbw Wickramasinghe 36
G J Whittall b Muralitharan 1
G B Brent c Kaluwitharana b Vaas 3
B C Strang c Dilshan b Vaas 4
H K Olonga not out 4
E Z Matambanadzo not out 2
Extras (2b 7lb 11nb) 63
Total (for 9, 90 overs) 163
Fall: 1-0, 2-0, 3-0, 4-53, 5-133, 6-134, 7-152, 8-153, 9-161.
Bowling: Vaas 24-7-44-3; Zoysa 13-4-22-3; Wickramasinghe 18-7-31-1; Muralitharan 27-10-40-2; Jayasuriya 3-1-7-0; Arnold 5-2-10-0.
SRI LANKA: M S Atapattu, *S T Jayasuriya, R P Arnold, D P M Jayawardene, T M Dilshan, R S Kaluwitharana, S I De Saram, W P U J C Vaas, D N T Zoysa, G P Wickramasinghe, M Muralitharan.
Umpires: R B Tiffin and S A Bucknor (WI).