Либо расположите register.h и addrmode.h так, чтобы им не требовалось определение структуры, либо переместите объявление структуры в собственный заголовок.
Обратите внимание, что вам не нужно определение процессора:
для определения typedef для struct cpu:
typedef struct cpu cpu_type;
для определения переменной или члена указателя типа на struct cpu:
struct cpu * ptr;
для объявления внешней переменной типа struct cpu:
extern struct cpy myCpu;
для объявления функции с аргументом struct cpu:
void foo (struct cpu p);
Таким образом, основные причины, по которым необходимо определить структуру в заголовке, целью которого не является предоставление этого определения:
вы определяете в заголовке структуру, имеющую член типа struct cpu:
struct intelcpu {
структура базы процессора;
};
вы определяете встроенные функции, необходимые для доступа к членам или имеющие локальную переменную этого типа