平定了许都之乱之后,曹操本想亲自去汉中督战,可代郡北部乌桓又趁机造反,曹操只得令三子曹彰领兵前去平叛,曹彰领兵走后不久,宛城南阳人侯音因不满曹操税务太重聚众杀死太守起兵造反,欲与镇守荆州的关羽联合威协许都,曹操大惊,又慌忙急令镇守襄阳的曹仁出兵镇压,一切安排妥后,曹操这才亲率大军出邺城西进长安,在九月份到达长安,曹操并没有继续向汉中进军,他担心侯音与关羽会合曹仁不敌,这才坐镇长安,指挥汉中与塞北及南阳的战事。
而此时向阳平关挺进的刘备大军已兵至剑阁,刘备担心归附曹操阴平的氐王强端会过马鸣阁偷袭自己的后路,于是刘备便令陈式引五千兵马前去占领马鸣阁,以阻断强端与曹操的联系。
马鸣阁是白水之边阴平通往关中的一个山涧要塞,在剑阁的西北方向,离剑阁不远。其道路是在峭壁上架木为梁,一侧是峭壁,一侧为深谷河流,牵马经过时马都会惊得长鸣不止,因而叫马鸣阁。
陈式引兵走后,刘备进入阳平关地界,刘备听从法正的见意先去攻打阳平关西南的广石,广石与阳平关呈犄角之势,若取阳平关最好的策略就是先把广石这个犄角给他砍下。
然而出乎刘备意料的是,镇守广石的是魏国名将张郃。张郃在瓦口关被张飞击败后退守广石,张郃也是一名久经杀场的老将,他见刘备引大军来攻,只坚守不出,日夜防范,刘备攻了多日也未攻下,倒伤亡了不少兵士,刘备一筹莫展。
再说阳平关守将夏侯渊,夏侯渊听说刘备来犯,又探听到刘备令陈式引一军去占领马鸣阁,于是夏侯渊便令徐晃引一军前去攻打马鸣阁。徐晃引一军赶到马鸣阁,但见陈式在马鸣阁要塞之上分十营把守,心中大喜。那么陈式为什么要把这五千人马分十营把守呢?这岂不兵力分散?其实这也有陈式的难处,一是马鸣阁栈道狭窄,无法立营扎寨;二是马鸣阁前后道路都在山腰上,没有宽阔的地方,再者陈式也不懂得怎样排兵布阵,他根本就没料到曹军会来的这么快,更没料到来的是大将徐晃,陈式哪里是徐晃的对手,两个人交手不到十合,陈式便拨马败走,徐晃挥军掩杀,马鸣阁道路狭窄,陈式军拥挤不得过,被杀死的、跌落山谷坠入河流的不计其数,陈式弃马而走,最后只带了几百人逃回成都。