Я пишу новую операционную систему и столкнулся с непредвиденным поведением ядра
Обычно в этот момент люди начинают пользоваться отладчиком.
проблема в файле kernel\kernel.asm
Нет. Ядро твоё не запускается, потому что бутлоадер пытается загрузить его поверх собственного кода:
0x00008122: bb 00 81 movw $0x8100, %bx
0x00008125: 50 pushw %ax
0x00008126: b8 00 00 movw $0, %ax
0x00008129: 8e c0 movw %ax, %es
0x0000812b: 58 popw %ax
0x0000812c: cd 13 int $0x13
-- это вызов int 13 из бутлоадера, посмотри на адреса. Вот куда возвращается выполнение после этого int 13:
0x0000812e: 00 00 addb %al, (%bx, %si)
0x00008130: 00 00 addb %al, (%bx, %si)
0x00008132: 00 00 addb %al, (%bx, %si)
0x00008134: 00 00 addb %al, (%bx, %si)
0x00008136: 00 00 addb %al, (%bx, %si)
0x00008138: 00 00 addb %al, (%bx, %si)
0x0000813a: 00 00 addb %al, (%bx, %si)
0x0000813c: 00 00 addb %al, (%bx, %si)
0x0000813e: 00 00 addb %al, (%bx, %si)
0x00008140: 00 00 addb %al, (%bx, %si)
0x00008142: 00 00 addb %al, (%bx, %si)
0x00008144: 00 00 addb %al, (%bx, %si)
Такие дампы ты можешь получить запуская своё ядро в qemu следующим образом:
qemu-system-i386 -hda collector.bin -d in_asm,exec,cpu -D log