从零开始的操作系统没有编译器如何编译代码成机器码执行

我一直有个疑问,在写操作系统内核的时候大多数用到了c语言的代码,以及部分的汇编代码,汇编代码是基于cpu的指令集架构可以被处理成机器码然后执行,c语言代码肯定也要如此,那么在从零开始写操作系统的过程中还没有编译器,那怎么让c语言编译链接形成机器码?还有汇编代码也没有编译器,怎么形成机器码?

放到别的电脑上交叉编译好,拿可执行文件执行即可。