世民看別生病的士卒,就親自加以慰問,讓州縣給予治療,士卒無不為之感動。有未列入東征部隊名籍的,自願以私人的裝備跟從軍隊,數目以千計,他們說:“不求天子封爵加賞,隻希望為朝廷戰死在遼東。”太宗都沒有應允。
這月二十四日,太宗自定州出發,親自佩帶弓矢,把雨披捆在馬鞍後麵。命長孫無忌暫行侍中職、中書令岑文本、楊師道代中書令,與太宗同行。
太宗命令自定州到遼東,沿途每數十裏設置一個烽火台,並與皇太子約定,攻占遼東城時,將以烽火為訊號。
李世積自柳城(今遼寧朝陽)出發,主攻方向為遼東,但為迷惑敵人,先派偏師大張旗鼓向懷遠鎮(今遼中附近)方向佯動,而主力則出其不意地向西北開往甬道(今遼中北遼河西岸)、通定(今新民縣東北遼河西。通定鎮為隋大業八年征遼時所置,甬道是隋軍起浮橋渡遼水所築。)李道宗、張儉各率一部分兩路向新城(今撫順北)、蓋牟城(今撫順市)、建安(今蓋縣東北)方向前進,以阻止高麗軍向遼東增援,保障主力兩翼安全。
4月初一,李世積所部自通定渡過遼水,進抵玄菟(令沈陽東),高麗各城都閉城防守。初五,李道宗率數千人到新城,折衝都尉曾三良領十幾名騎兵直逼城門,城裏沒人敢出城應戰;張儉率領胡族騎兵作為前鋒,渡過遼水直攻建安城,擊敗高麗軍一部,斬殺數千人。
李世積用拋石車、衝東猛攻遼東城,晝夜不停地攻打了12天。先是,高麗兵聽說唐軍有拋石車,能把300斤重的石頭拋出1裏多遠,甚為害怕,於是在城上用木頭做成戰樓,以抵擋飛石。李世積排列好拋石車,發出的石頭,把城上戰樓全部擊毀,又推衝車,把城上的陴屋(城上的矮牆加以掩蓋)全部撞碎。
太宗親自率領精銳部隊與李世積部會合,把遼東城包圍了無數重,鼓噪聲震天動地。這月17日,天刮起了南風,太宗派人爬上衝竿,燒掉城西南邊的城樓,火勢順風蔓延,燒到城內。又指揮將士登上城牆,高麗軍奮力作戰,仍然抵不住。唐軍攻占遼東城,斬殺萬餘人,受降精兵萬餘人,俘獲男女4萬多人,改城名為遼州。
28日,唐軍向東進攻白岩城,該城靠山近水,地勢險要。次日開戰,右衛大將軍李思摩中箭負傷,太宗親自為他吮血。將士們聽說後,無不為之感動。高麗烏骨城(今鳳城縣東南鳳皇山上)派兵萬餘人增援白岩城。唐將契苾何力車八百騎兵迎戰,何力衝鋒陷陣,腰部被刺中,薛萬備(萬徹弟)單槍匹馬前往救援,從萬人之中救出何力。何力更加激憤,包裹傷口再戰,跟隨他的騎兵奮發衝擊,於是打敗了高麗軍。追擊數十裏,斬殺千餘人,天色已晚,才收兵回營。
6月初一,唐軍繼續攻城,李世積攻打城西南,太宗設營在城西北。城主孫代音暗中派心腹請求投降,說:“我願意投降,但怕城中有人不聽從命令。”太宗賜給他一麵唐軍的旗幟,說:“如果決定投降,你就把旗幟插到城上。”不久,孫代音插上了旗幟,城內高麗人以為唐軍已經登城,也就跟著孫代音投降了。
當初,太宗攻占遼東城時,白岩城曾請求投降,但沒多久又後悔。太宗為城主的反複,非常生氣,命令軍中說:“攻下城時就把男女和財物全部常給戰士。”到這時,李世積看到皇上要接受孫代音的投降,就帶著幾十名甲士請求說:“士兵所以爭著冒矢石的危險奮戰,不顧生死,就為了貪求虜獲其男女財物;現在城已快攻下,為什麼還接受他們的投降,而辜負士兵們的心願呢!”太宗聽後下馬答謝說:“將軍說得對。可是放縱士卒殺人而虜掠他們的妻子兒女,朕內心實在不忍。將軍部下有功勞的,朕拿府庫裏的財物賞賜他們,這樣便能從將軍手中贖得這一個完整的城”世積聽了隻好退下。唐軍獲得該城男女萬餘口,戰卒兩千四百人。太宗在臨近河邊的地方設帳,接受投降,仍然賜食物給百姓,八十歲以上老人,賞賜給多少不等的布帛。其他城堡的士兵駐紮在白岩城的,全部給予撫慰,並發給糧食器仗,讓他們自決去留。太宗在白岩城設置岩州,仍任命孫代音為刺史。
契苾何力傷勢很重,太宗親自為他敷藥包紮。在審訊俘虜中查到刺傷何力的高麗士兵高突勃,把高突勃交給何力,讓他親手殺死高突勃,以解心頭之恨。何力奏報說:“他為主人冒著白刃的危險,而刺傷了我,這是個忠勇的壯士。臣和他起初並不相識,沒有怨仇。”就把他釋放了。
太宗寬待俘虜的政策頗收成效,所以在蓋牟城俘虜的七百名加屍城(今平壤西南)人,被釋放後都請求從軍報效。太宗撫慰他們說:“你們的家都在加屍,如果你們為我作戰,莫離支必定會殺害你們的妻子兒女。我得到一個人的幫助,卻使一家人遭到毀滅,這種事我不忍心做。”於是,都賜給他們口糧,遣送他們回去。