高句丽军中有对庐,年老习事,劝说高延寿让士兵停止前进,不出战,等待大唐军队粮食耗尽,可不战而胜。而高延寿不听,引导的士兵直接前进,在距离安市城40里处驻扎下来。
唐太宗担心他们徘徊不至,又派出左卫大将军阿史那社尔率领突厥1000多名骑兵前去挑战,佯败而逃,将敌军一直引诱到安市城东南八里处的山坡前。高延寿等立即依靠大山摆开阵势,高句丽、靺鞨连营在一起,长达40多里地,准备与大唐军队决战。
唐太宗李世民登高观察了敌人的营房以及周围山川形势,确定了伏兵隐藏地点。当天夜里立即召集诸位武将进行部署:命令李世绩率领步兵、骑兵1.5万人在安市城西面山岭布阵,正面阻击敌军;命令长孙无忌率领牛进达等精兵1.1万人从山北面穿过峡谷绕到敌人的身后,从背后夹击敌军;唐太宗则亲自率领步兵、骑兵4000人潜伏进入敌人大营北面的山峰上,攻击敌人的中部。并且约定好诸位将军,听到鼓角声一齐出击。
7月20日,高延寿看见只有李世绩布阵迎战,轻视李世绩的兵士兵很少,列开阵势想要决战。这时,唐太宗李世民在北山上遥远的看见了长孙无忌行军的尘土飞扬,立即下令鼓角一齐轰鸣,旗帜并举。诸位将军听到鼓角声响,率领大军一齐杀向敌军。高延寿等大惊失色,想要分一些士兵抵御,无奈势式已经混乱,调动不灵。
李世绩则率领1万手持长枪的步兵,列成方队向敌军冲了过去。这是李世绩在瓦岗军时期就创立的战法,后来经过不断的使用和总结,已经日趋完善了。
这一战法曾经使李世绩打了不少的胜仗,特别是在关键的时刻能够以少胜多,转危为安。果然,高延寿虽然兵多势众,但是根本抵挡不住李世绩率领的长枪步兵方队的猛烈冲击,很快就败下阵来。
与此同时,长孙无忌从敌人后面杀来,唐太宗又从北山上杀下来,在三面大唐军的夹击下,敌人的军队头尾不相顾,大败溃逃,丢下了2万多具尸体。
高延寿等人收拾了余下的残兵败将,共得到了人,依靠的大山,作坚固的防守。李世绩、长孙无忌等人率领大军,把高延寿率领的残兵败将团团围住,并且拆掉了桥梁,切断了敌军的归路。
7月21日,高延寿等人自己料定没有办法逃脱了,于是举众投降。唐太宗李世民简选了其耨萨以下的酋长3500人,授以官职,迁居内地;其余的3万多人全部释放,让他们返回平壤;另外将屡屡充当高句丽先锋、与大唐军为敌的靺鞨兵3300人全部埋坑里杀掉,以示警戒。这一仗,还缴获了战马5万匹,牛五万头,铁甲一万多领。
大唐军队只用了一天时间,就全部消灭了高延寿、高惠真率领的援军,消息一经传开,高句丽举国震骇。后黄城、银城等城的守卫的军队吓得赶快拔腿逃去,以至于数百里内没有人烟了,都跑掉。
不过,安市城守卫的军队却众志成城,奋力抵抗。8月2日,唐太宗李世民移营到达了安市城东岭上督战,9月6日,又移营到达了安市城南面督战,都不能把安市城攻下。特别是安市人只要看到皇帝的仪仗旗盖,就马上登上城墙鼓噪辱骂,使唐太宗大怒不止,更使攻城的总指挥李世绩羞愧难当,毫无面子。李世绩恼羞成怒,对唐太宗说:请求攻破城池的日子,把城里的男子全部杀掉。没想到城内部的人听到后,“人人都拼死的作战”,反而使大唐军队越来越难以攻下城池。