司马懿建功立业是在他的后半生。黄初七年(226)七月曹叡继位,司马懿以顾命大臣晋升为抚军大将军,统领禁军。就在这一年的八月,吴国出兵围攻襄阳,曹叡令司马懿率兵去解围。司马懿到达襄阳时,吴将诸葛恪已退走,曹叡改封他为骠骑大将军,都督荆、豫二州军事,让他坐镇宛城,主持荆州地区的对吴作战。但在他镇宛城的四年中,魏、吴只在淮南地区打了一仗,襄、樊间没有发生大规模军事冲突,司马懿的战功,乃是镇压了新城(今湖北竹山)太守孟达的反叛。
孟达原是蜀国房陵郡(今湖北房县)的守将,于黄初元年(220)献城降魏。曹丕为广招降人,特合房陵、上庸、新城三郡为新城郡,用孟达为太守,让他带领旧部屯驻上庸。曹丕死后,孟达在朝中失去靠山,心不自安,诸葛亮就乘机派人去进行策反。太和元年(227)冬,孟达准备起兵叛魏,配合蜀军,进攻洛阳。这时,镇守宛城的司马懿得到孟达的部将申议的告密,便先发制人,迅速出兵包围了上庸。经过十六天的攻城,孟达的部将开门献城。孟达被擒,叛乱很快就平息了。
孟达的叛变,对魏、蜀双方来说都是一件大事。孟达叛变是诸葛亮实现分兵伐魏的一个千载难逢的机会,因此就在孟达叛魏的同时,诸葛亮率领蜀军攻祁山。假使不是司马懿迅速出兵,而让孟达叛魏得逞,率军直捣洛阳,魏国的形势就非常险恶了。
在这次战役中,司马懿用兵迅速、果敢,获得了成功。诸葛亮事先就预料到司马懿会起兵镇压,并且派使者去告诫孟达要小心防备。可是,孟达认为宛城离洛阳八百里,离上庸一千二百里,司马懿起兵要先上奏朝廷批准,包括使者往返的路程,估计荆州兵起码要一月才能到达新城,这时他已进军洛阳了。但司马懿看到形势危急,就不经朝廷批准而直接出兵镇压,还倍道兼程,以日行军一百五十里的速度,在八天内就包围了上庸城,使孟达措手不及。这是司马懿为魏国立下的第一个战功,显示了他政治家的胆略。
在镇宛期间,公元230年,司马懿还配合曹真进行过一次伐蜀。但魏军一入蜀境,就立即遇上连绵的大雨,曹真、司马懿只得各自退回原防。这次伐蜀,可谓是劳而无功。
太和五年(231)三月,曹真病死,值诸葛亮进攻陇西,魏明帝曹叡起用司马懿为大将军,都督雍、凉二州诸军事,屯守长安,代曹真主持对蜀的战争。司马懿与诸葛亮正面交锋就是从这年开始的。这次,诸葛亮出兵围攻魏国祁山大营的守军,曹叡令司马懿率车骑将军张郃、雍州刺史郭淮等前往解围。从力量对比看来,魏兵力方面是占了优势,同时蜀军方面还有一个致命的弱点,就是补给线太长,粮食接续不上。诸葛亮之所以选择三月出兵陇西,就是打算以抢割当地正在成熟的麦子来补给军粮。曹叡深知蜀军的弱点。故在出兵的前夕,就告诫司马懿不要轻易与诸葛亮交锋,只监视蜀军,阻止其抢割麦子,就能迫使蜀军不战而退。上邽(今甘肃天水)是魏国有民屯的县,故司马懿特令部将费曜、戴凌等率精兵前往防守,而自率大军去解祁山之围。但诸葛亮远非孟达可比,他获悉魏军将至,即分兵坚守祁山的蜀营—— 南围,而自率主力部队去抢割上邽的新麦,沿途击溃了郭淮、费曜等人的阻拦,进围上邽,同时割麦,迫使正在围攻祁山蜀营的司马懿不得不撤兵赶来救援。司马懿就在上邽附近据险坚守;监视蜀军,而不肯决战,使蜀军不能从容割麦。诸葛亮求战不得,便回军去攻打祁山附近的卤城。卤城是陇右盛产小麦的地方。司马懿又尾随蜀军赶到卤城附近驻扎,而照样据险坚守,避免决战,却引起部将的不满,嘲笑他畏蜀如虎。在部将的强烈要求下,司马懿被迫在卤城附近与蜀军打了一仗,结果是损失“甲首三千级,玄铠五千领,角弩三千一百张”(《三国志·诸葛亮传》裴注《汉晋春秋》)。司马懿深知在战争艺术方面不是诸葛亮的敌手,便敛兵坚守,再也不敢应战。到了六月,蜀军粮尽,诸葛亮只好退回汉中。
在这次战役中,司马懿虽打了败仗,但从战略上来看,却是成功的。他尽量避免决战而死死钉住蜀军,阻挠其割麦,从而成功地迫使诸葛亮退兵。从蜀国方面来看,诸葛亮虽打败了魏兵,后又射杀尾追的魏国名将张郃,但未能歼灭魏国的主力部队或夺得寸尺之地,反而消耗了蜀国十分短缺的人力、物力,从长远的战略意义来看,这次伐魏是失败的。
第二次战争发生在青龙四年(236)。诸葛亮总结了历次北伐失败的教训,出兵之前,先运大量的粮食贮存于斜谷(今陕西眉县西南)邸阁,并于是年四月出兵占领了渭水南岸的五丈原(今陕西眉县西南)。按诸葛亮的作战计划,是在占领五丈原地之后,再渡过渭水去占领积石原(今陕西眉县西北),通过占领渭水沿岸两个战略高地,来控制水陆交通线,从而切断魏国与陇西诸郡的联系。这样,一是蜀军可以从陇西诸郡夺取十分短缺的粮食和其他物资;二是可以将储存在斜谷阁邸和陇西诸郡的粮食沿渭水运到前线,而不受魏军的骚扰;三是便于联结羌人起来反魏。诸葛亮企图在这一地带建立根据地,然后稳扎稳打地向东推进,迫近长安。
司马懿原先对诸葛亮的战略意图认识不足,错误地认为诸葛亮兵出斜谷后,就应该去占领武功(今陕西武功西),然后向东迫近长安,而进驻五丈原就不能构成对魏国的威胁。幸有宿将郭淮识破了诸葛亮的意图,建议抢先占领积石原,不让蜀军通过占领两个战略高地来控制渭水沿岸的交通线。司马懿采纳郭淮正确的建议,并令他带兵去抢占积石原。当诸葛亮派重兵渡河抢占积石原时,由于郭淮事先做了严密的防备,蜀军只好退回渭南。
司马懿在分兵令郭淮抢占积石原的同时,自率大军扎营于马冢山,隔武功水(又名斜水,今陕西岐山县南的石头河)与五丈原的蜀军对垒。诸葛亮被郭淮阻绝于渭南,便积极向魏军挑战,企图击溃魏国的主力部队再推进。但司马懿并没有上当,他绝不应战,咬牙忍受诸葛亮赠予“巾帼妇女之饰”的嘲弄,并且千方百计压制部将强烈的不满,终于成功地将蜀军阻隔于武功水西,形成两军对峙的局势。
诸葛亮渡渭和东进的途径既分别被郭淮和司马懿堵住,只好分兵屯田,找机会再发动进攻。但就在这年的八月,诸葛亮病死于军营中,蜀军失去统帅,又退回汉中。司马懿御蜀的战事就这样结束了。
在对蜀作战中,司马懿不像以前镇压孟达和以后镇压公孙渊的叛乱那样勇猛果断。他尽量避免决战,尽管部将讽刺他畏蜀如虎,诸葛亮嘲笑他像巾帼妇女那样懦怯,以致百姓中出现“死诸葛吓走生仲达”的谚语,他都能咬牙忍受。这样做,上是迎合曹叡意图,下又可以避免因损兵折将而丧失自己的威望,终于挡住了蜀国的进攻。善于审时度势、扬长避短和采纳部属的正确建议,这就是司马懿能建功的原因。然而,《晋书》却曲从晋人的记载而虚张他的战功,所谓“斩获万计”“降者六百余人”等,都属虚浮不实之词。
诸葛亮死后,西线无战事,司马懿在削平辽东公孙渊的割据中立下了战功。自汉末动乱,辽东太守公孙度打着保境安民的旗号割据一方,传至公孙渊已历三世。长期以来,公孙度、公孙康父子与曹魏保持若即若离的隶属关系,不敢公开分裂。但嗣位的公孙渊却是一个昏庸残暴而又野心勃勃的纨绔子弟,为了称王割据,他暗中派使者去勾结孙吴,从而引起与魏国关系的恶化,以致发生军事冲突。到了景初元年(237),公孙渊自称为燕王,出兵封锁边境。于是曹叡命司马懿统兵去进行讨伐。
司马懿于景初二年(238)春率兵从洛阳出发,六月进入辽东境内,与公孙渊的部将卑衍、杨祚对峙于辽隧(今辽宁海城西)。卑衍掘围堑二十余里,坚壁拒守。司马懿采用声东击西的战术,他佯攻辽军的南围,而暗中率兵渡过辽水,向东北急行军直趋辽东的首府襄平(今辽宁辽阳),把辽隧守军抛在后面。卑衍军闻讯赶来救襄平,魏军从而得以反客为主,三战三捷,击溃卑衍的部队,进围襄平。但魏军刚围襄平,就遇上三十天的连绵大雨,辽水暴涨,军心动摇,部将中有人要求撤围迁营,朝廷中也有人主张退兵,但曹叡和司马懿都不动摇。雨止后,魏军又猛攻襄平。到了八月,城中粮尽,公孙渊窘急乞降,遭到司马懿的坚决拒绝,于是只好突围出走,被魏将追斩于襄平城郊,辽东悉平。破城后,司马懿为张大战功,又进行了一次灭绝人性的屠城(平孟达时,他曾屠过上庸),下令“男子年十五以上七千余人皆斩之,以为京观。伪公卿以下皆伏诛,戮其将军毕盛等二千余人”(《晋书·宣帝纪》)。这充分暴露了他豪门士族贪婪残暴的本性,但对于削平辽东的割据,还是应该肯定的。