在黄巾起事时,东阿县县丞王度起而应之,更烧掉县中的仓库。县令逾城逃走,吏民负老携幼向东逃到渠丘山。此时尚在故乡的程昱命人去侦视王度,发现王度等人得空城不能固守,于是出城西五六里外止屯。程昱于是向县中大户薛房等人说:“如今王度等得到城郭也不能屯居,其势可以测知。他不过想趁机虏掠财物,并没有坚甲利兵以盈攻守之志。我们为何不相继回城守之?而且城高郭厚,又多谷米,如今若果还城找寻县令,共同坚守,王度必不能久待下去,那时向他攻击,王度便可破了。”
薛房等以为然,吏民却不肯相从,程昱只得无奈地说:“愚民不可共计大事。”
于是密遣数骑在东山上高举旗幡,令薛房等人望见,然后大呼:“贼兵已经攻至!”
便下山取城,吏民见势便跟随同去,终于找到县令,一共守城。后来王度等人来攻城,不能攻破,正欲退走。此时程昱率吏民开城门追击,王度败走。东阿由此得全。初平三年(192年),兖州刺史刘岱辟召程昱为用,程昱不应命出任。当时刘岱与袁绍、公孙瓒和亲,袁绍令妻子居于刘岱处,公孙瓒亦遣从事范方带兵助刘岱守地。后来袁绍与公孙瓒不和。公孙瓒击破袁绍军,于是遣使向刘岱说要收取袁绍的妻子,令刘岱遣上,并与袁绍绝交。公孙瓒又向范方下令:“若刘岱不遣上袁绍家小,便领兵回来。待我定了袁绍,就攻打刘岱。”
刘岱连日不能决议,别驾王彧向刘岱说:“程昱有谋略,能断大事。”
刘岱于是召见程昱问计,程昱说:“如果放弃袁绍这个近援而求于公孙瓒为远助,这等于求人于越地以拯救受溺的儿童一样。而且,公孙瓒亦非袁绍之敌,如今虽稍胜袁绍军队,但最终必为袁绍所擒。如果取其一朝一夕之势而不思虑长远的计划,将军您必败无疑。”
刘岱听从其计。于是范方领其兵归去,兵尚未至而公孙瓒已大为袁绍所破。刘岱表奏程昱为骑都尉,程昱却以身疾请辞。后来刘岱为黄巾所杀。曹操兵临兖州(治昌邑,今菏泽巨野县东南),辟召程昱,程昱一口答应。程昱将行之时,他的乡人十分疑惑,说他:“怎么你前后的行为如此相背?!”
程昱却只笑而不应。程昱初至之时,曹操便跟他谈论大事,十分高兴,以程昱为寿张令。曹操征徐州时,令程昱与荀彧留守鄄城。那时张邈等军作叛,迎吕布入兖,四周郡县响应,唯有鄄城、范县、东阿不动。有吕布军的降兵,说陈宫欲带兵取东阿,又使氾嶷取范县,吏民皆十分恐惧。荀彧对程昱说:“如今兖州作反,唯有此三城得以保全。陈宫等以重兵临城,如果不能同心结力,三城必震动。而您是吏民之望,如今回去向他们游说,一定可以成功!”
程昱于是返回东阿,经过范县时游说靳允:“听说吕布执君母弟妻子,孝子诚不可为心!现在天下大乱,群雄并起,必有命世,能够平息天下动乱的人,只有曹公,得主者昌,失主者亡,陈宫他背叛曹公,迎接吕布进城,四周郡县皆响应,似乎有作为,然而观之,吕布何如人!吕布粗暴少亲信,刚直而又无礼,只不过是匹夫之勇罢了,陈宫等人不能相好君主。吕布兵虽然众多,但必将失败,曹公智略不世出,乃上天所授!你定要固守范县,我则守东阿,就可立田单之功,希望你好好考虑。”
靳允哭着说道“我不敢怀有二心。”
当时氾嶷已在范县,范县县令靳允经程昱鼓励,伏兵刺杀氾嶷。程昱又遣别骑占住仓亭津,陈宫军不能得渡。程昱至东阿时,东阿令枣祗已经率吏民拒城坚守。又有兖州从事薛悌与程昱协谋,终于守住三城,以待曹操。曹操归还,执程昱之手道:“若非程卿之力,吾无所归矣。”
于是表程昱为东平相,屯于范县。兴平元年(194年),曹操与吕布在濮阳交战,数度失利。又有蝗虫灾害,于是双方引兵暂去。袁绍于是使人游说曹操连和,希望曹操能迁居于邺城。当时曹操眼见兖州新失,军粮又将尽,计议之下正想答应袁绍要求。程昱见事,向曹操言道:“私下听说将军打算将家属迁居于邺城,与袁绍连和,有这样的事吗?”
曹操说:“是的。”
程昱劝谏:“我认为将军您只是一时临事而惧,否则又怎会如此不深思熟虑?袁绍据有燕、赵之地,怀并吞天下之心,可是其智不能济其事。将军自以为能在他底下做事吗?将军您有龙虎之威,可以做韩(信)、彭(越)他们这样臣服于他人的事吗?如今兖州虽残,尚有三城可守。能战之士,不下万人。以将军的神武,加上我和文若(荀彧字)等人的协助,并收城池士兵而加以运用,那么霸王之业可以成就了。希望将军能慎重考虑一下!”
曹操才放弃连和袁绍的想法。汉献帝定都许县后,以程昱为尚书。其时兖州尚未绥抚停当,于是又以程昱为东中郎将,领济阴太守,都督兖州事。建安三年(198年),刘备失去徐州,前来归附曹操。程昱劝曹操杀刘备,曹操不听。建安四年(199年),曹操派遣刘备至徐州截击袁术,程昱与郭嘉向曹操道:“明公前日不除掉刘备,如今更向他借兵,他必定会有异心的。”
曹操后悔,但已追之不及。果然,袁术病死后,刘备去到徐州,杀车胄,举兵背反曹操。建安五年(200年),程昱迁为振威将军。当时袁绍在黎阳将移兵南渡,而程昱却只有七百兵守着鄄城,曹操知道危急,命人告诉程昱,欲加二千兵前往鄄城助守。