孔明让赵云领一支人马,抄小路接应黄忠,黄忠胜了不必出战,败了再去救应;又派刘封、孟达领兵三千,在山中多插旌旗,扰乱敌人军心;派人到下辨授计给马超;派严颜去守阆中,让张飞、魏延同取汉中。张郃和夏侯尚来见夏侯渊,夏侯渊慌忙派人报知曹洪,曹洪又连夜报进许昌。曹操大惊,点齐四十万人马,于建安二十三年七月出发。曹操让夏侯为先锋,曹休断后,自领中军,使用了天子的全副仪仗。兵出潼关,行至南郑,曹洪出迎,对他说了张郃兵败的经过,曹操原谅了张郃,派人让夏侯渊进兵。张郃劝他提防黄忠,他却没把黄忠放在眼里,就派夏侯尚领三千兵为前哨,吸引黄忠。黄忠屯兵于山口,夏侯渊不出战。
这天,门军报曹兵下山挑战,黄忠派陈式领兵一千迎敌。陈式与夏侯尚打了不几回合,夏侯尚拨马就逃。陈式赶去,夏侯渊领伏兵杀出,把他活捉了。黄忠得报大怒,法正让他步步为营,诱夏侯渊出战。黄忠就把所有的东西分赏给士卒,士卒纷纷表示愿意死战。夏侯渊要出战,张郃说:“这是反客为主之计,不可出战。”夏侯渊不听,派夏侯尚出战,与黄忠交手只一回合,就被黄忠捉了去。双方约定明天在阵前交换俘虏。夏侯渊带着陈式,黄忠带着夏侯尚,都脱得只剩短衫短裤,一声鼓响,二人各往本阵跑。夏侯尚快跑回阵门时,被黄忠一箭射中后心,带箭跑回。夏侯渊拍马来战黄忠,刚战二十回合,曹营忽然鸣金收兵,黄忠趁势冲杀一阵。夏侯渊回阵,问:“为什么鸣金?”压阵官说:“我见山凹中有蜀军旗帜,怕是伏兵。”夏侯渊就不再出战。
黄忠逼到山下,法正说:“定军山的西面有一座高山,可以看到定军山的虚实。将军可以先取此山。”当夜二更,黄忠攻山。杜袭只带了几百人把守山头,慌忙败逃。黄忠占了山头,法正说:“将军可守在半山,看我旗帜。我举白旗,将军按兵不动;我举红旗,将军便杀下山。”杜袭败回,向夏侯渊报告黄忠占了对山,夏侯渊就要出战。张郃认为是法正的计谋,劝他不要出战,夏侯渊说:“他能看到我寨中的动静,我怎么能不出战呢?”于是就领兵来到山下骂阵。法正举起白旗,黄忠任他百般辱骂,就是不出战。待到午时,曹兵累了,大都下马歇息,法正就摇动红旗。黄忠一马当先冲下山,夏侯渊措手不及,被黄忠一刀连头带肩砍为两截。黄忠与陈式夹攻张郃。张郃败走,却遇赵云拦路,忙领败兵朝定军山逃去。杜袭从山上逃来,说:“刘封、孟达已经夺了定军山。”张郃带着败兵到汉水扎营,又派人飞报曹操。曹操得知夏侯渊战死,放声大哭,急命徐晃为先锋,亲率大军找黄忠报仇,又命张郃、杜袭把米仓山的粮草转移到北山寨中。
黄忠提着夏侯渊的头向刘备献功,刘备封他为征西大将军,为他设宴庆功。牙将张著来报:“曹操亲率二十万大军,前来为夏侯渊报仇。”孔明说:“他们这是怕粮食被劫,前来搬运粮食。假如有人深入敌后,烧了粮食,很容易就打败他们了。”黄忠说:“老夫愿往。”孔明叮嘱他不可轻敌,刘备说如果能杀死张郃,比杀夏侯渊强十倍。黄忠就要去斩张郃。孔明让赵云协助他,看他们二人谁能立功。
二人立下营寨,赵云说:“曹操立下十座营寨,将军去夺粮,责任重大,想用什么计策?”黄忠要先去,赵云也争着要去。二人就抓阄,黄忠赢了。赵云就跟他商定,假如黄忠午时回来,赵云就按兵不动,回不来就领兵接应。黄忠回寨,让副将张著作好准备,四更天,二人领兵偷渡汉水,天明时来到北山,守粮的曹兵慌忙逃命。黄忠命士卒取来柴草堆在粮上,正准备放火,张郃领兵杀来,与黄忠战作一团。曹操又派徐晃救应,双战黄忠。张著带着三百军士逃出来,又被文聘领兵包围。
赵云等到午时,仍不见黄忠回来,就安排张翼:“你坚守营寨,两边多设弓弩,作好准备。”说完带上三千兵士,挺枪跃马,杀向曹营。正走着,慕容烈拦路,被他一枪刺死。又往前走,遇焦炳拦路,又被他一枪刺死。他冲到北山下,见张郃、徐晃领兵正在围攻黄忠,就大喝一声,杀进重围。赵云救出黄忠,又杀进重围,救出了张著。“常山赵云”的旗号所到之处,曹兵四散逃命。曹操大怒,亲自领兵追赶赵云。赵云回寨,派弓弩手埋伏到寨外壕沟中,把营内旗帜全放倒,单枪匹马,立在营门外。曹操赶到,下令冲杀。曹兵见赵云岿然不动,吓得转身就走。赵云把枪一招,弓弩齐发,曹操拨马就逃。蜀兵追杀过来,曹兵自相践踏,死伤无数。曹操正逃时,忽见北山火起,原来刘封、孟达乘虚偷袭了北山,只好败回南郑。赵云占了曹营,黄忠夺得粮草,缴获兵器无数。刘备得报,对孔明说:“子龙浑身是胆啊!”于是封赵云为“虎威将军”,大赏将士。
曹操派兵从斜谷小路取汉水,刘备就领兵从汉水西边迎敌。曹操派徐晃为先锋,牙门将军王平熟知地理,愿意和徐晃同去。曹操让他当副先锋,自己屯兵定军山北。徐晃、王平来到汉水。徐晃命令军士渡河列阵,王平怕刘备乘机攻击,极力劝阻,徐晃不听,命搭起浮桥渡汉水安营。黄忠、赵云领兵扎下营寨,任凭曹兵叫骂,就是不出战。看看天晚,黄忠、赵云见曹兵要退,两面夹攻,把曹兵逼入汉水,淹死无数。徐晃逃回去,迁怒于王平,要杀他。半夜里,王平在军中放了一把火,趁乱领部下投降了赵云。刘备非常高兴,封王平为偏将军。徐晃逃回,曹操亲率大军来夺寨。赵云见曹兵势大,退过汉水。孔明观看地势,见上游有一带土山,让赵云领五百士兵带着战鼓去埋伏,听他放炮就擂一通鼓。白天曹操挑战,蜀营无人应战。夜间,曹兵刚刚睡下,孔明放起号炮,赵云就下令擂动战鼓。曹兵惊醒,慌忙迎敌,却不见一人。回营才睡下,号炮又响,战鼓又鸣。一连三夜,夜夜如此,曹操只好退兵三十里。孔明让刘备渡过汉水,背水扎营。曹操派人下战书,孔明回复“来日决战”。次日两军布阵,曹操让徐晃出马,刘备让刘封迎敌。刘封斗不几回合,拨马就走。刘备率军脱逃,一路丢弃了不少物资。曹操命令众将去追,士兵却在乱抢东西。曹操见刘备逃向汉水,生怕中计,忙命鸣金收兵,刘备趁机领兵杀回。曹兵大败,逃往南郑。谁知南郑已被张飞、魏延夺取,曹操只得逃回阳平关。
刘备进了南郑,安民完毕,对孔明说:“曹操驻守阳平关,势单力孤,先生用什么办法能打退他?”孔明就派张飞、魏延兵分两路,共劫曹操粮道,让赵云、黄忠兵分两路,放火烧山。曹操得报,心中疑惑,问手下:“谁敢去敌张飞?”许褚愿去。曹操就给他一千精兵,去接应粮草。押粮官见许褚来接应,认为万无一失,就拿来酒肉献给他。他乘着酒兴,要连夜行进。走到半路,张飞迎头杀出。许褚挥刀迎战,却因酒醉手脚不听使唤,被张飞一矛刺中了左肩,翻身落马,军士救起他,往后便逃。张飞夺下粮车。许褚逃回,曹操亲自提兵与刘备决战。刘封出马,徐晃迎战。斗不几回合,刘封拨马就逃。曹操领兵追赶,只听蜀寨中炮声连天,怕有埋伏,忙下令退兵。士兵自相践踏,死伤无数。曹操逃进阳平关,刚坐下,就见东门放火,西门呐喊,南门放火,北门擂鼓。曹操魂飞魄散,弃关而逃,张飞、赵云、黄忠又各领一支人马杀来。众将保住曹操,逃到斜谷界口,碰到次子曹彰领兵接应。曹操高兴万分,说:“我的黄胡子儿子来了,定能大破刘备!”遂率军返回。刘备听说曹彰来到,派刘封、孟达各领五千兵迎敌。刘封不敌曹彰,大败而回。孟达刚想与曹彰交战,马超、吴兰从曹军后路杀到。孟达率军夹攻,曹兵大败。吴兰去追赶,被曹彰一戟刺死。双方混战一场,曹操在斜谷界口扎营。
曹操屯兵日久,想进军被马超拦路,想退兵又怕蜀兵耻笑。这天,厨师送来鸡汤,曹操见碗中有鸡肋,就又犯起了犹豫。恰好夏侯惇来请示夜间口令,曹操随口说了句:“鸡肋,鸡肋。”夏侯惇传令,口令为“鸡肋”。行军主簿杨修就让手下军士收拾行李,准备回家。夏侯惇得报,问:“你为什么收拾行李?”杨修说:“因为听到今夜的口令,知道魏王不久就要退兵。鸡肋吃着没肉,扔了又可惜。魏王进不能胜,退怕人笑,在此无益,不如早归。”夏侯惇众将都准备回家。曹操夜间巡营,见此情景,盛怒之下杀了杨修。原来,杨修才高,为人狂放不羁,常常犯曹操的忌讳,又因为和曹植关系密切,常教曹植难倒曹丕,甚至难倒曹操。曹操对他早有杀心,正好借扰乱军心的罪名杀了他。曹操杀了杨修,又装模作样要杀夏侯惇,众官都求情,才免了他的死罪,下令明天进兵。次日,曹兵出战,遇见魏延。曹操让庞德出战,二人正斗得起劲,曹营火起,原来是马超偷袭了曹营。曹操拔剑,喝令:“后退者斩!”众将努力向前,魏延败退,曹操就回兵斗马超。他正站在高处指挥,魏延又杀回,一箭把他射下马来。魏延纵马来杀他,幸亏庞德及时赶到,救下曹操。曹操被魏延射断两颗门牙。他这才想起杨修的见解是正确的,就收尸厚葬,传令退兵。他坐上毡车,刚出营门,两边山上火起,马超领兵杀来。曹兵日夜不停,直逃到京兆,方才放心。