Proces pisanja mikrokode za krmilni pomnilnik centralne procesne enote se imenuje mikroprogramiranje. Mikrokod za krmilni pomnilnik se ustvari po konfiguraciji računalnika in njegove mikroprogramirane krmilne enote. Krmilni pomnilnik je del nadzorne enote, v kateri so shranjeni vsi mikro programi, ki jih ni mogoče pogosto spreminjati. Vsaka vrstica mikro programa predstavlja mikroinstrukturo, ki določa eno ali več mikro operacij. Obstajata dva različna načina, kako lahko organiziramo mikroinstrukcije: vodoravno in navpično. Vodoravne mikroinstrukcije predstavljajo več mikro operacij, ki se izvajajo hkrati. Vendar v skrajnih primerih vsaka horizontalna mikroinstrukcija nadzoruje vse strojne vire sistema. Nasprotno, navpična mikroinstrukcija spominja na običajni format strojnega jezika, ki obsega eno operacijo in nekaj operandov. V nasprotju s horizontalnimi mikroinstrukcijami vertikalna mikroinstrukcija predstavlja posamezne mikro operacije.
Pri vodoravnem mikroprogramiranju se vsak bit posebej identificira z eno samo kontrolno točko, kar pomeni, da je treba izvesti ustrezno mikro operacijo. Ker je vsaka mikroinstrukcija dovolj sposobna za nadzor več virov hkrati, ima potencialno prednost učinkovitejše uporabe strojne opreme, poleg tega pa zahteva manjše število mikroinstrukcij na mikroprogram. Omogoča višjo stopnjo paralelizma z minimalno količino kodiranja in ločenih kontrolnih polj. Vendar pa je razvoj mikroprogramov, ki uporabljajo vire optimalno ali učinkovito, zapletena naloga. Vodoravno mikroprogramiranje nudi veliko prilagodljivost, saj je vsak kontrolni bit neodvisen drug od drugega. Ima večjo dolžino, zato običajno vsebuje več informacij kot vertikalne mikroinstrukcije.
V vertikalnem mikroprogramiranju je v nasprotju s horizontalnim mikroprogramiranjem spremenljiv format in višja stopnja kodiranja. Ne samo skrajša dolžino mikroinstrukcije, ampak tudi preprečuje, da bi povečana zmogljivost pomnilnika neposredno vplivala na dolžino mikroinstrukcije. Vsaka navpična mikroinstruktura na splošno predstavlja eno mikro operacijo. Za vsako mikro operacijo se uporabi koda in dekoder pretvori kodo v posamezne krmilne signale. Ker je določena samo mikro operacija, ki jo je treba izvesti, se polja mikroinstrukcije v celoti izkoristijo. Poleg tega je vertikalne mikroprograme lažje zapisati kot njihovi horizontalni kolegi. Navpična mikroinstrukcija spominja na običajni format strojnega jezika, ki obsega eno operacijo in nekaj operandov. Posledično ga je enostavno uporabiti za mikroprogramiranje. Na splošno je sestavljena iz štirih do šestih polj, ki zahtevajo približno 16 do 32 bitov na navodilo.
V vertikalnem mikroprogramiranju je v nasprotju s horizontalnim mikroprogramiranjem spremenljiv format in višja stopnja kodiranja. Pri vertikalnem mikroprogramiranju se kontrolni bitovi kodirajo z vsako kodo, ki se uporablja za vsako dejanje, ki se izvaja, in dekoder z navodili dekodira kodo v več kontrolnih signalov. V nasprotnem primeru horizontalno mikroprogramiranje vključuje horizontalne mikroinstrukcije, ki kodiranja sploh ne uporabljajo. Predstavljajo vsak kontrolni bit v podatkovni poti, dodeljen z ločenim bitom v mikroinstrukcijski obliki. Vsak delček v kontrolnem polju je pritrjen na krmilno linijo.
Vodoravno mikroprogramiranje na splošno sledi zaporednemu pristopu za določitev naslednje mikroinstrukcije v mikroprogramu, podobno kot običajna oblika strojnega jezika. Vsak bit je označen posebej z eno samo krmilno točko, kar pomeni, da je treba izvesti ustrezno mikro operacijo. Za prekinitev zaporedja so potrebne posebne pogojne in brezpogojne veje mikroinstrukcije. Navpično mikroprogramiranje lahko uporablja razmeroma naslovno shemo, v kateri je potrebnih nekaj bitov za določitev relativnega skoka naprej ali nazaj. To zahteva izračunavanje naslovov na vsakem koraku.
- Vertikalni mikroprogrami imajo boljšo gostoto kode, kar je koristno za velikost krmilnega prostora. Navpična mikroinstrukcija spominja na običajni format strojnega jezika, ki obsega eno operacijo in nekaj operandov. Vsaka navpična mikroinstrukcija predstavlja eno mikro-operacijo, medtem ko operandi lahko določijo pomnilnik podatkov in vir. Po drugi strani vodoravni mikroprogrami na splošno predstavljajo več mikro operacij, ki se izvajajo hkrati. V skrajnih primerih vsaka horizontalna mikroinstrukcija nadzoruje več strojnih virov hkrati.
- Vodoravni mikroprogrami ponujajo izboljšano prilagodljivost, saj je vsak kontrolni bit neodvisen drug od drugega. Ima večjo dolžino, zato običajno vsebuje več informacij kot vertikalne mikroinstrukcije. Vodoravne mikroinstrukcije z 48 ali več biti so precej pogoste. Vodoravni mikroprogrami imajo potencialno prednost pri učinkovitejši uporabi strojne opreme, poleg tega pa zahteva manjše število mikroinstrukcij na mikroprogram. Navpične mikroinstrukcije so na drugi strani bolj kompaktne, vendar manj prilagodljive od vodoravnih mikroinstrukcij. Vertikalni pristop je posledično enostaven za mikroprogramiranje.
V nasprotju s horizontalnimi mikroinstrukcijami vertikalna mikroinstrukcija predstavlja posamezne mikro operacije. Vodoravni mikroprogrami omogočajo večjo stopnjo paralelizma z minimalno količino kodiranja in ločenimi kontrolnimi polji, medtem ko so kontrolni biti kodirani v navpičnih mikroprogramih. Izbira med obema pristopoma mora biti previdna. Vendar pa v praksi oblikovalci uporabljajo kombinacijo horizontalnih in navpičnih oblik mikroinstrukcije, tako da je nastala struktura kompaktna in hkrati učinkovita.