Неподдерживаемая ошибка набора команд x86-64 при компиляции файла C

Я пытаюсь следовать учебникам вэтот ссылка на сайт.

Когда я перехожу к той части, где я начинаю создавать файл test.c, я пытаюсь запустить первую строку компиляции.

gcc -c -g -Os -march=i686 -ffreestanding -Wall -Werror test.c -o test.o

Вот содержимоеtest.c

__asm__(".code16\n");
__asm__("jmpl $0x0000, $main\n");

void main() {
}

Когда я вызываю первую строку компиляции, она показывает мне эту ошибку.

test.c:1:0: error: CPU you selected does not support x86-64 instruction set
 __asm__(".code16\n");
 ^

Может кто-нибудь сказать мне, почему это происходит? И если возможно, как это исправить?

Я использую Ubuntu Desktop x64, заранее благодарю за помощь.

РЕДАКТИРОВАТЬ:

Я изменил первую строку компиляции на:

gcc -c -g -Os -m32 -ffreestanding -Wall -Werror test.c -o test.o

И, кажется, работает нормально. Тем не менее, есть еще две строки, которые доставляют мне неприятности.

ld -static -Ttest.ld -nostdlib --nmagic -o test.elf test.o

а также

objcopy -O binary test.elf test.bin

Первый бросает мне ошибку.

ld: i386 architecture of input file `test.o' is incompatible with i386:x86-64 output

И из-за этого я не пробовал финальную строку компиляции.

Вот код для файла test.ld.

ENTRY(main);
SECTIONS
{
    . = 0x7C00;
    .text : AT(0x7C00)
    {
        *(.text);
    }
    .sig : AT(0x7DFE)
    {
        SHORT(0xaa55);
    }
} 

Любые предложения о том, как это исправить?

Ответы на вопрос(3)

Ваш ответ на вопрос