Дивизия под командованием полковника Деева, включавшая артиллерийскую батарею лейтенанта Дроздовского, была переброшена под Сталинград, где сосредоточивались основные силы Советской Армии. В состав батареи входил взвод под руководством лейтенанта Кузнецова. Оба офицера окончили одно военное училище в Актюбинске, где Дроздовский выделялся строгой выправкой и был любимцем командиров. После выпуска он стал непосредственным начальником Кузнецова.

Взвод Кузнецова насчитывал двенадцать человек, среди которых были наводчик первого орудия Нечаев, старший сержант Уханов и боец Чибисов. Последний ранее побывал в немецком плену, что вызывало недоверие в окружении, поэтому он стремился угодить окружающим. Кузнецов считал, что Чибисов должен был покончить с собой, а не сдаваться, однако тот думал прежде всего о детях. Нечаев, бывший моряк, был известен своей любовью к женщинам и ухаживал за санинструктором батареи Зоей Елагиной. Сержант Уханов, прошедший службу в уголовном розыске и окончивший училище вместе с Кузнецовым и Дроздовским, не получил офицерского звания из-за инцидента с командиром дивизиона. Кузнецов относился к нему как к равному, тогда как Дроздовский смотрел свысока. Санинструктор Зоя регулярно навещала батарею, вероятно, чтобы увидеть Дроздовского.

На одной из остановок к эшелону присоединился командир дивизии Деев, а также генерал-лейтенант Бессонов, командующий армией. Бессонов, потерявший без вести сына на Волховском фронте, испытывал внутреннюю боль, особенно при виде молодых офицеров. После выгрузки дивизия продолжила движение на лошадях, совершая краткие привалы. Кузнецов догадывался, что они удаляются от Сталинграда, не зная, что их задача — встретить наступающие немецкие танковые дивизии с целью деблокировать окружённую армию Паулюса.

Отставание кухонь и голод вынуждали солдат пить грязный снег с обочин. Попытка Кузнецова обсудить этот вопрос с Дроздовским встретила резкий отказ, поскольку последний подчёркивал своё командное превосходство. В это время немецкие войска начали прорыв к окружённой группировке Паулюса. По приказу Сталина армия под командованием генерала Бессонова была направлена на юг для встречи с немецкой ударной группой «Гот». Бессонов являлся замкнутым человеком, не стремившимся завоевать симпатии окружающих. Потеря сына, с которым он встретился в госпитале перед войной, тяжело давила на него, вызывая чувство вины и крест отцовства. Несмотря на известность, что сын служил в армии генерала Власова, Сталин утвердил назначение Бессонова на новый пост.

С 24 по 29 ноября войска Донского и Сталинградского фронтов вели бои против окружённой немецкой группировки. Гитлер потребовал продолжать боевые действия до последнего солдата, после чего была начата операция «Зимняя гроза» для прорыва блокады. 12 декабря генерал Гот нанес удар по стыку советских армий, к 15 декабря немцы продвинулись на 45 километров к Сталинграду. Несмотря на введённые резервы, немецкие войска упорно наступали. Армия Бессонова, усиленная танковым корпусом, должна была задержать противника и заставить отступить, удерживая последний рубеж у реки Мышковы.

На командном пункте в полуразрушенной станице произошёл конфликт между генералом и дивизионным комиссаром Весниным, которому Бессонов не доверял, подозревая в шпионаже из-за связи с генералом Власовым. Ночью дивизия Деева начала окопываться на берегу Мышковы. Батарея Кузнецова размещала орудия в мерзлой земле, ругая старшину, отставшего вместе с кухней. Лейтенант думал о семье и родных местах, вспоминая смерть отца и оставшихся дома матери и сестры. После окопки он вместе с Зоей отправился к Дроздовскому, который проинформировал о военной обстановке и выразил недовольство дружбой Кузнецова с Ухановым. Лейтенант защищал право сержанта на уважение.

После ухода Кузнецова Зоя осталась с Дроздовским, который проявил ревность и требовал от неё доказательств любви. Он боялся предательства, исходящего из личной истории с потерей родителей и одиночеством. Зоя не могла перейти грань, что вызывало раздражение у Дроздовского.

Генерал Бессонов прибыл на батарею, ожидая возвращения разведчиков, отправленных за «языком» — пленным немцем, чьи показания были важны для понимания ситуации. Битва началась с налёта немецких самолётов, за которым последовала атака танков. Кузнецов, опасаясь за сохранность прицелов, вместе с Ухановым и ездовыми отправился к орудиям, где обнаружил тяжело раненого разведчика. После отправки его на командный пункт лейтенант продолжил бой, находясь в состоянии сосредоточенного яростного единства с орудием.

Немецкая самоходка начала расстреливать соседнее орудие, и Дроздовский приказал Сергуненкову уничтожить её с помощью гранат. Молодой солдат погиб, не выполнив задание, что глубоко потрясло Кузнецова. К концу дня стало очевидно, что советские войска не выдерживают натиска, танки противника прорвались на северный берег реки. Бессонов, опасаясь истощения сил, приказал биться до последнего снаряда, что объяснило его суровость по отношению к подчинённым. Веснин понял причины слухов о жестокости генерала.

Перебравшись на командный пункт Деева, Бессонов узнал, что немцы сосредоточили основной удар здесь. Разведчик сообщил о том, что двое товарищей вместе с пленным застряли в тылу врага. Из штаба пришёл начальник контрразведки с листовкой, на которой была фотография сына Бессонова, рассказывающая о хорошем уходе за ним в немецком госпитале. Предлагалось держать генерала под присмотром, но Веснин не поверил в его предательство и решил не раскрывать информацию.

Бессонов ввёл в бой танковый и механизированный корпуса и попросил Веснина ускорить их продвижение. Во время выполнения задания комиссар погиб, и генерал так и не узнал, что сын жив. Поздним вечером единственное орудие Уханова замолчало из-за отсутствия снарядов, а немецкие танки форсировали Мышкову. Бой постепенно стихал.

Для Кузнецова изменились жизненные ориентиры. Он и его товарищи — Уханов, Нечаев и Чибисов — были измотаны и считались счастливыми, что пережили бой, однако радости не испытывали. Они оказались в немецком тылу. Внезапная атака врага выявила в двух шагах тело человека, которого Чибисов принял за немца и выстрелил. Оказалось, что это был один из русских разведчиков. Двое других прятались рядом с подбитыми бронетранспортёрами.

Вскоре к расчёту присоединились Дроздовский, Зоя и Рубин. Кузнецов взял Уханова, Рубина и Чибисова, чтобы помочь разведчику, а Дроздовский последовал с ними. Пленного немца и одного разведчика нашли в большой воронке, однако попытка найти второго привлекла внимание немцев, и участок оказался под пулемётным огнём. В ходе обстрела Зоя была тяжело ранена, а Дроздовский получил контузию.

Несмотря на попытки доставить Зою в расчёт, она скончалась. Кузнецов, охваченный горем, винил Дроздовского в её смерти и впервые в жизни плакал одиноко и отчаянно. Поздним вечером Бессонов осознал, что немцам не удалось вытеснить советские войска с северного берега, и бои приостановились. Пленного допрашивали, подтвердив ввод резервов врага. После этого стало известно о гибели Веснина, что вызвало у генерала сожаление о напряжённых отношениях с комиссаром.

Командующий фронтом уведомил Бессонова о продвижении четырёх танковых дивизий в тыл врага, и генерал отдал приказ атаковать. Вскоре бой перешёл в переломную фазу: введённые корпуса оттеснили немцев на правый берег, захватили переправы и начали окружать войска противника.

После сражения Бессонов проехал по правому берегу, награждая оставшихся в живых участников боя. Его эмоции выражались через ветер, который словно помогал ему выпустить слёзы восторга, скорби и благодарности. Орден Красного Знамени получил весь расчёт Кузнецова, а Уханов был огорчён тем, что Дроздовский тоже получил награду. Лейтенант Кузнецов, Уханов, Рубин и Нечаев, сидя с орденами в стаканах водки, продолжали вести бой, который не прекращался вокруг них.