Error de conjunto de instrucciones x86-64 no admitido al compilar archivo C

Estoy tratando de seguir los tutoriales enesta enlazar.

Cuando llego a la parte donde empiezo a hacer un archivo test.c, trato de ejecutar la primera línea de compilación.

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

Aquí está el contenido detest.c

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

void main() {
}

Cuando llamo a la primera línea de compilación, me muestra este error.

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

¿Puede alguien decirme por qué está pasando esto? Y si es posible, ¿cómo solucionarlo?

Estoy ejecutando Ubuntu Desktop x64, gracias de antemano por su ayuda.

EDITAR:

He cambiado la primera línea de compilación a:

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

Y parece funcionar bien. Sin embargo, hay dos líneas más que me están dando problemas.

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

y

objcopy -O binary test.elf test.bin

El primero me arroja el error de.

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

Y debido a esto, no he probado la línea final de compilación.

Aquí está el código para el archivo test.ld.

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

Alguna sugerencia en como arreglar esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta