Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
|
td3:abi64 [2012/08/16 20:21] mdoallo creado |
— (actual) | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== 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 (la directiva ORG ausente en el código ASM), esto se hace con: | ||
| - | |||
| - | 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__(" | ||