Vous semblez avoir un malentendu sur la manière dont les logiciels sont compilés. Linux est essentiellement un logiciel géant écrit dans le langage de programmation C.
L'un des principaux avantages de l'écriture de logiciel dans un langage de niveau supérieur à l'assemblage est qu'il permet d'écrire le logiciel indépendamment de l'architecture du processeur. Le même code (écrit en C) peut être compilé pour plusieurs types d'architecture.
Si vous tapez gcc
dans le terminal de votre RPi, vous verrez qu'il y est installé. Pour voir le compilateur en action, utilisez le tutoriel "hello world" ci-dessous et compilez-le avec l'indicateur -S
à la fois sur un PC x86 et le RPi. Si vous comparez les deux, vous verrez que la sortie de l'assembly est considérablement différente, même si les deux sorties ont été produites par le même code C. Le système d'exploitation Linux fonctionne de la même manière.
Exemple de code C:
#include <stdio .h> # include <stdlib.h>int main (int argc, char * argv []) {printf ("Hello, World! \ n"); exit (EXIT_SUCCESS);}
Sortie gcc -S sur un Xeon (x86-64):
.file" hello.c ".section .rodata.LC0: .string" Hello, World! " .text .globl main .type main, @functionmain: .LFB2: .cfi_startproc pushq% rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq% rsp,% rbp .cfi_def_cfa_register 6 sousq 16 $,% r-movl% edi % rbp) movq% rsi, -16 (% rbp) movl $ .LC0, l'appel% edi met movl $ 0, l'appel% edi exit .cfi_endproc.LFE2: .size main,.-main .ident "GCC: (Ubuntu 5.4. 0-6ubuntu1 ~ 16.04.1) 5.4.0 20160609 ".section .note.GNU-stack," ", @ progbits
Sortie gcc -S sur un Raspberry Pi 2 (Cortex-A7):
.arch armv6 .eabi_attribute 27, 3 .eabi_attribute 28, 1 .fpu vfp .eabi_attribute 20, 1 .eabi_attribute 21, 1 .eabi_attribute 23, 3 .eabi_attribute 24 , 1 .eabi_attribute 25, 1 .eabi_attribute 26, 2 .eabi_attribute 30, 6 .eabi_attribute 34, 1 .eabi_attribute 18, 4 .file "hello.c" .section .rodata .align 2.LC0: .ascii "Hello, World ! \ 000 ".text .align 2 .global main .type main,% functionmain: @ args = 0, feint = 0, frame = 8 @ frame_needed = 1, uses_anonymous_args = 0 stmfd sp !, {fp, lr} add fp , sp, # 4 sous sp, sp, # 8 str r0, [fp, # -8] str r1, [fp, # -12] ldr r0, .L2 bl met mov r0, # 0 bl exit.L3:. align 2.L2: .word .LC0 .size main,.-main .ident "GCC: (Raspbian 4.9.2-10) 4.9.2" .section .note.GNU-stack, "",% progbits