Argentina stunned Germany, the gold medallists in 2008 and 2012, by 5-2 while Belgium clinched a 3-1 semi-final win over neighbours Netherlands, the 1996 and 2000 champions.
The South Americans pounced on a German team who only squeezed into the semi-finals by scoring three times in the closing five minutes to beat New Zealand in the last-eight, 3-2.
Defender Gonzalo Peillat hit a hat-trick of penalty corners with Joaquin Menini and Lucas Vila giving Argentina a 5-0 lead.
Menini's 35th minute goal was the pick of the bunch for an Argentina team who will win their first medal in men's hockey. Agustin Mazzilli escaped a defender to lift the ball over German goalkeeper Nicolas Jacobi for his teammate to tap home. Peillat's triple took his total for the tournament to 10. "We watched a lot of videos of the Germans before this game. We had three corners in the first part of the game and then we scored three-from-three so it was good, happy," said 24-year-old Peillat.
Moritz Furste and Christopher Ruhr scored late consolation strikes for Germany. Argentina were also indebted to goalkeeper Juan Vivaldi who pulled off 10 saves in total. "We didn't play our best hockey today, that's for sure," admitted Furste.
"They defended well, they scored three corners, that just can't happen. After that it was very difficult for us to come back into the game.
"But we believed in ourselves. We tried everything until the end, it just wasn't enough." Argentina, ranked at seven in the world, have already surpassed their best previous Olympic performance of a fifth-place finish at the 1948 Games in London.
Four years ago, in London again, they were 10th. Belgium got the better of 2012 runners-up Netherlands and guaranteed of improving on their previous best Olympic run -- that was a bronze medal on home ground in Antwerp in 1920.
Four years ago, they could only manage a fifth-place finish but they have been revived by New Zealand coach Shane McLeod who led the Kiwis at the 2008 and 2012 Games.
Belgium scored twice in four minutes in the first half through Jerome Truyens and skipper John-John Dohmen.
The Dutch pulled one back before the half-time interval through Mink der Weerden. But a field goal in the 46th minute from Florent van Aubel gave attack-minded Belgium the advantage again.
"It's an historical night. It was a great game, amazing against Holland," said Dohmen. "We are doing the perfect tournament, the tournament for life and it's at the right moment, at the Olympics."
Van der Weerden was damning in his summary of events. "We played really shit in the first half. No proper passing, no proper rhythm, nothing. We just gave it away in the first half, it was very silly," he said.