Assumption is directly derived from Latin assumptionem which does have a P, so it also has a P. Assume on the other hand is derived from Latin assumere, which didn't have a P.
Other similar examples include presume/presumption and consume/consumption
Articulatory reasons for the P
The epenthetic P is inserted for articulatory reasons.
Epenthesis happens for a variety of reasons such as:
- ease of articulation
- to prevent adjacent vowels in a hiatus (e.g. idea of being pronounced idea[r]of in most non-rhotic accents)
- to simplify consonant clusters (some people—mostly non-native speakers who don't have complex clusters in their native language—pronounce words like screen, scratch, school with a preceding vowel to break the consonant cluster).
Epenthetic stops between nasals and fricatives
There are many situations where epenthetic consonants are inserted. Most of the time when there's a voiceless fricative (/s ʃ θ/ etc) after a nasal (/m n ŋ/), we tend to insert an epenthetic stop (/p t k/ etc) between both the fricative and a nasal.
Here's a good explanation from English after RP by Geoff Lindsey:
The /n/ is a stop sound, which means that the oral airflow of speech is stopped; the tongue blade is held against the alveolar ridge while breath is re-directed through the nose. As /n/ changes to /s/ [which is an oral consonant i.e the air comes out through the mouth], airflow must be switched from nasal to oral, and at the same time the stoppage at the alveolar ridge must be released,
[...]
Epenthesis is more likely if the fricative after the nasal is voiceless, when the articulatory system has an additional voicing change to handle [i.e. moving from a voiced sound like /n/ to a voiceless one like /s/]. It’s less likely if the fricative is at the beginning
of a stressed syllable, e.g. inˈsane [not *in[t]sane].
(pp 63-64)
This phenomenon is called epenthesis (excrescence)
The same thing happened to assumption in Latin before it entered English (as Colin Fine explained). There's a voiceless fricative /ʃ/ after a nasal /m/, so when changing from nasal to oral, Latin speakers put an epenthetic stop /p/ (homorganic with the nasal) between the nasal and the fricative.
There are many examples of epenthetic stops in present day English:
- youngster is usually pronounced young[k]ster, (with an epenthetic k between the nasal [ŋ] and the oral fricative [s])
- warmth and hamster are often pronounced warm[p]th and ham[p]ster, respectively (with an epenthetic p)
- thunder used to be þunor, the d is epenthetic.
- In some English accents, wants and once are pronounced identically i.e. 'once' with an epenthetic t (from another answer).