至正十七年七月,徐達自應天率兵攻略宜興,奪取了常熟,降服了大批張士誠的士兵。徐達兵克常熟後,距離張士誠的統治中心平江(今江蘇蘇州市)已經不到一百裏,因此平江大震。
至正十八年正月,吳國公朱元璋親征浙江婺州(今浙江金華一帶),徐達奉命留守應天。二月,朱元璋返回應天,即派徐達水陸並進,西征陳友諒據守的皖城(今安徽潛山縣北),並順勢占領池州(今安徽貴池市),大敗陳友諒增援池州的部隊。至正二十年(1360年)五月,陳友諒派重兵進攻池州,來勢極為凶猛。而徐達早已遵照朱元璋的指示做好了迎戰準備,守城的士兵在城上擊鼓呐喊,而早已埋伏在九華山上的伏兵也乘勢殺出,前後夾擊,大敗陳友諒兵,殲敵一萬餘人,生擒三千人。然而,在大敗陳兵後,徐達和常遇春卻在如何處置三千名戰俘的問題上產生了嚴重的分歧。常遇春主張殺死全部戰俘,而徐達堅決反對,並說:“現在爭奪天下的戰爭剛剛開始,我們絕不能濫殺戰俘而斷絕了他們歸附我們的希望。”由於二人爭執不下,隻好派使者請吳國公朱元璋來裁決。正如徐達所預料的一樣,朱元璋也不同意殺死戰俘。但是,在使者回到池州前,常遇春還是不顧徐達的勸阻,在一天夜裏擅自下令將三千名戰俘坑殺掉十分之九。此事傳到朱元璋耳邊,朱元璋對常遇春非常不滿,命令徐達將剩下的三百名戰俘全部釋放,並對自己委派常遇春去池州與徐達共掌兵權的決定後悔不已,決定引以為戒,對身邊的人說,日後凡有征戰,隻要徐達出馬,就命他一人獨掌兵權,統帥諸將。
(三)收複太平,升任相國
至正二十年閏五月,陳友諒挾持徒有虛位的農民軍領袖徐壽輝,統兵攻陷了朱元璋占據的太平城。隨後,他又弑殺徐壽輝,徹底掌握了蘄黃紅巾軍的領導權,並且暗中派人約張士誠合力攻打應天府。吳國公朱元璋知道如果陳、張二人聯手,自己的處境將會極其不利,於是決定在兩股敵軍聯手之前,主動出擊,變被動為主動。主意一定,便派遣陳友諒的故舊持信前往陳軍中,謊稱願意為內應,引誘陳友諒迅速來攻應天。在得知陳友諒中計後,朱元璋立即調兵遣將,布下重重陷阱,隻等陳友諒上鉤。
按照朱元璋的部署,徐達統兵駐紮在應天府城南門外,其他將領也各自領兵分據其他水陸要塞。十日,陳友諒率大軍乘船而至,發現中計後,便屯兵龍灣,與朱元璋對峙。徐達等統領水陸官兵奮勇夾擊,慌亂之中,陳友諒率領部分將士倉皇逃往安慶。徐達奉命追擊陳友諒,並在采石擊潰了陳友諒麾下素以能征善戰著稱的皂旗軍,陳友諒被迫收集殘兵敗將,放棄太平城,落荒而逃。徐達乘勢收複太平。
至正二十一年八月,朱元璋打著“吊民伐罪,納順招降”的旗號,率領徐達、常遇春等大將溯江而上,興師大舉討伐陳友諒。大軍所到之處,所向披靡,連克安慶、江州(今江西九江市)、洪都(今江西南昌市)等地。徐達也因在這些戰鬥中功勞巨大而於至正二十一年升任為“江南等處行中書省右丞”。
經過幾年的艱苦努力,吳國公朱元璋不僅在應天站穩了腳跟,而且實力大為增強,形成了與張士誠、陳友諒三強並存的局麵。在認真分析形勢後,朱元璋決定先除掉陳友諒,後消滅張士誠。
至正二十三年(1363年)四月,陳友諒再次興兵順江而下,直入江西,建造高數丈的巨艦,糾集號稱六十萬人的大軍,傾巢而出,進圍洪都。朱元璋守將朱文正、鄧愈、趙德勝、薛顯率領全城將士殊死搏戰,堅守八十五天,陳友諒軍仍未能攻破城池。南昌守軍浴血奮戰,為朱元璋從容調兵遣將,準備與陳友諒決戰贏得了寶貴的時間。
七月初六,徐達遵照朱元璋的指令,回師救援南昌。朱元璋在龍江(今江蘇南京興中門外)誓師,親率大軍二十萬進擊陳友諒。陳友諒聽說朱元璋親率大軍到來,遂解南昌之圍,東出鄱陽湖返戰。這是一場關係到雙方生死存亡的大決戰,史稱“鄱陽湖之戰”。徐達作為主攻部隊,率軍先行,首先與陳友諒相遇於康郎山(今江西南昌康山),兩軍依湖對陣。陳友諒軍人多勢眾,艦船高大,氣勢洶洶。徐達毫無懼色,親率諸將冒死闖陣,其部下將士大受鼓舞,無不以一當十,奮勇衝殺。徐達一舉擊敗陳友諒前鋒,斬殺一千五百餘人,繳獲巨艦一艘,初戰告捷。接著俞通海等乘風發射火炮,焚毀敵船二十餘艘,燒死、溺死很多敵軍。徐達在敵陣中奮力拚殺,連續酣戰。大火從敵船上燒到徐達的戰船上,他一麵指揮士兵撲火,一麵繼續與陳軍格鬥,越戰越勇,並指揮戰船在敵陣中節節推進。雙方在康郎山鏖戰整整一天,湖水被血染成了紅色,天空也被炮火硝煙遮蔽得暗淡昏黑。朱元璋軍在徐達等勇將的率領下,殊死搏戰,擊退陳友諒的進攻。此戰,徐達首挫敵鋒,壯大全軍聲威,為朱元璋取得決戰勝利奠定了基礎。當天晚上,朱元璋為防止東線張士誠利用鄱陽湖大戰乘機入寇,命令徐達撤出戰鬥,回守應天。徐達走後,朱元璋指揮將帥士卒繼續與陳友諒在鄱陽湖上血戰,終於擊斃陳友諒,全殲陳軍主力,取得鄱陽湖大戰的勝利。