¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Consideraciones para integrar C y Assembler en IA-32e
En el archivo ASM
- Declaración EXTERN en ASM
- No hace falta la directiva ORG en el ASM
- Se compila con:
nasm -f elf64 $(KERNEL_SRC) -o $(KERNEL_OBJ)
En el Archivo C
- Se compila con:
gcc -nostdinc -m64 -c -o $(FUNCION_C_OBJ) $(FUNCION_C_SRC)
Juntando todo
Ambas compilaciones generan archivos objetos (.o).
Usar luego el linker y se debe especificar el inicio (que la directiva ORG ausente en el código ASM), esto se hace con -Ttext <dirección física>, típicamente 0x8000:
sudo ld -m elf_x86_64 --oformat binary -b elf64-x86-64 -Ttext 0x8000 $(KERNEL_OBJ) $(FUNCION_C_OBJ) -o $(KERNEL_BIN)
Break point en C
Se puede apelar al magic break point del bochs aún en lenguaje C, para eso:
__asm__("xchg %bx,%bx");