Se il tuo obiettivo è veramente capire cosa succede sotto la cappa, allora forse, invece di imparare C e scrivere un programma giocattolo, devi invece guardare un compilatore C e capire come lavori. Per quanto riguarda i compilatori, un compilatore C è uno dei più semplici, in quanto la lingua non ha tutte quelle funzioni di alto livello.
Per quanto riguarda il compilatore, utilizzerei un semplice compilatore con un'architettura macchina di facile comprensione, quindi non ti preoccupare troppo delle istruzioni x86.
Suggerirei il C-- compiler (scritto in Java) che emette MIPS assembly.