Skipper Tatenda Taibu hit 92 and Elton Chigumbura 71 as Zimbabwe avoided following on in the first Test against Bangladesh on Saturday.
Zimbabwe reached 308 for eight wickets at the close on the third day, still 180 runs behind on first innings.
Taibu made the most of being dropped three times to dampen Bangladesh's hopes of a first test victory in their 35th match.
The skipper shared a stand of 119 for the seventh wicket with Chigumbura, who hit 10 boundaries and a six before being caught behind by Khaled Mashud off Mohammad Rafique.
Taibu, having guided Zimbabwe past the follow-on target of 289, fell eight runs short of a first test century when he was trapped lbw by Rafique, who finished with 4-64.
Zimbabwe, who started the day on a precarious 84 for four, reached 154 for six at lunch after pace bowler Mashrafe Mortaza claimed two wickets.
Zimbabwe are playing their first test since they were suspended by the International Cricket Council last June for fielding a weakened team after a dispute between their board and several leading white players.
Scorecard
Bangladesh 1st innings 488
Zimbabwe 1st innings (overnight 84-4)
S.Matsikenyeri c Bashar b Baisya 28
B.Rogers run out 5
V.Sibanda lbw Rafique 12
H.Masakadza b Mortaza 29
G.Cremer lbw Rafique 0
B.Taylor lbw Mortaza 39
T.Taibu lbw Rafique 92
E.Chigumbura c Mashud b Rafique 71
M.Nkala not out 20
D.Hondo not out 0
Extras (b-1 lb-1 nb-9 w-1)) 12
Total (for eight wickets, 122 overs) 308
Fall of wickets: 1-31 2-48 3-59 4-59 5-86 6-152 7-271 8-308
To bat: Christopher Mpofu
Bowling: Mashrafe Mortaza 26-10-56-2 (nb-2 w-1), Tapash Baisya 24-5-87-1 (nb-1), Mohammad Rafique 37-16-54-4, Enamul Haque Jnr 26-9-55-0 (nb-5), Mohammad Ashraful 5-0-19-0, Rajin Saleh 4-0-25-0 (nb-1).