Ordinateur
En 1834, Charles Babbage conçoit une machine analytique dont les instructions proviennent de cartes perforées, empruntées à Jacquard, et qui prévoit des branchements conditionnels, des boucles et des sorties imprimées.
À partir de 1847, l'Anglais George Boole cherche une façon d'utiliser la rigueur mathématique pour résoudre des problèmes logiques et développe un système où les seules valeurs possibles sont « vrai » et « faux ».
En 1924, les expérimentations menant à la méthode des coïncidences de Walther Bothe non seulement lui rapportent le prix Nobel de physique en 1954, mais aussi établissent les bases de la représentation physique moderne de la porte logique ET.
Entre 1934 et 1935, les travaux sur les circuits de commutation de Victor Chestakov et Akira Nakashima démontrent la possibilité de représenter des fonctions logiques.
En 1937, dans son mémoire de maîtrise, Claude Shannon démontre que l'algèbre de Boole permet de concevoir n'importe quel circuit de commutation, posant ainsi les fondements théoriques des ordinateurs et de l'informatique :

Ba et Bb étant des bits à additionner, Br le bit de retenu, S le resultat de la somme de Ba et Bb, et R la retenu de cette somme.
Les tubes à vide permettent de construire les premiers ordinateurs : le Colossus, à usage dédié, puis l'ENIAC, à usage général mais reprogrammable seulement par câblage. Avec l'architecture à programme enregistré de von Neumann et l'arrivée des transistors de John Bardeen, Walter Brattain et William Shockley en 1947 naissent les ordinateurs modernes tels que nous les connaissons aujourd'hui.
Architecture
Les architectures communes comportent les mêmes composantes et sont organisées de façon très similaire.
Von Neumann
Plus lente et moins sécuritaire, cette architecture reste la plus utilisée puisqu'elle est plus simple, donc moins couteuse, et moins contraignante :
Harvard
La principale différence avec l'architecture précédente est qu'elle comporte deux mémoires distinctes, à accès simultané, la rendant plus rapide et plus sécuritaire puisque les données sont dissociées des instructions, mais moins flexible et plus complexe, donc plus couteuse :
Mémoire centrale
La RAM (Random Access Memory), ou mémoire vive, est la mémoire à court terme de l'ordinateur et permet d'échanger des données rapidement avec le processeur et les périphériques.
Chaque octet de la mémoire centrale est associé à une adresse, généralement exprimée en notation hexadécimale :
Boutisme
En gros boutisme (big endian), en comparaison avec le petit boutisme (little endian), l'ordre des octets des valeurs est inversé. Ces termes proviennent de Swift dans son oeuvre les Voyages de Gulliver, où il illustre la dispute sur le bout de l'oeuf par lequel on l'entame.
Le gros boutisme correspond mieux à notre notation des nombres. Mais en petit boutisme, l'octet de poids faible de données de 16, 32, 64... bits a la même adresse, ce qui n'est pas le cas en gros boutisme. Élargir ou tronquer un type n'y demande donc aucun recalcul d'adresse, ce qui a facilité l'extension progressive de la famille x86.
Unité centrale de traitement
Le CPU (Central Processing Unit), ou processeur, a pour rôle d'exécuter les instructions des programmes. On le présente souvent comme le cerveau de l'ordinateur. Il est principalement composé d'une unité de contrôle (CU), d'une unité arithmétique et logique (ALU) et de registres :
Registres
Un registre est un petit emplacement de stockage situé directement à l'intérieur du processeur, servant à conserver temporairement les données avec lesquelles celui-ci travaille.
Données
Parmi les quatorze registres qu'offre le processeur 8086 d'Intel, sorti en 1978, quatre registres de données de 16 bits sont disponibles pour un usage général. On nomme ces registres : AX, BX, CX et DX.
Ces registres sont divisés en deux parties de 8 bits chacune : la partie haute et la partie basse. AH et AL composent AX, BH et BL composent BX, etc. « H » étant la partie haute (High) et « L » la partie basse (Low).
Avec l'arrivée des processeurs 32 bits, les registres existants ont été étendus en EAX, EBX, ECX et EDX de manière à conserver une rétrocompatibilité avec le code 16 bits. On a fait de même avec l'arrivée des processeurs 64 bits en les étendant en RAX, RBX, RCX et RDX :
Les registres de données peuvent être utilisés librement par les programmeurs, mais ils ont aussi un rôle spécifique pour certaines instructions :
- AX (Accumulateur) sert à accumuler des valeurs.
- BX (Base) sert de base pour l'adressage en mémoire centrale.
- CX (Compteur) est employé pour gérer des structures itératives.
- DX (Donnée) complète AX dans des instructions mathématiques.
Segments
Parmi les autres registres, trois indiquent l'emplacement des segments de mémoire centrale qui contiennent les différentes parties d'un programme.
Le registre CS (Code Segment) identifie le segment qui contient les instructions du programme en cours d'exécution, DS (Data Segment) le segment qui contient ses données et SS (Stack Segment) le segment de sa pile :
Pointeurs
Le registre IP (Instruction Pointer) contient l’adresse mémoire de la prochaine instruction à exécuter, et le registre SP (Stack Pointer) contient l’adresse mémoire du sommet de la pile :
Indicateurs
Le processeur a été conçu pour ne jamais cesser de fonctionner. Un mécanisme interne est donc nécessaire afin que les programmeurs puissent faire le suivi des opérations.
Un registre d'indicateurs (flags) est disponible à cet effet. Chacun de ses bits représente une caractéristique du résultat de la dernière opération :
- ZF (Zero Flag) est
1si le résultat est0. - SF (Sign Flag) est une copie du bit de poids fort.
- CF (Carry Flag) est
1en cas de débordement pour les valeurs non signées. - OF (Overflow Flag) est
1en cas de débordement pour les valeurs signées. - ...
Jeu d'instructions
L'ensemble des instructions (Instruction Set) correspond à toutes les opérations qu'un processeur peut exécuter.
On distingue deux types d'ensembles d'instructions :
- CISC (Complex Instruction Set Computer) offre beaucoup d'instructions, plus complexes, donc processeur plus coûteux et instructions moins rapides à exécuter.
- RISC (Reduced Instruction Set Computer) offre peu d'instructions, plus simples, donc processeur moins coûteux et instructions plus rapides à exécuter.
Code d'opération
Tout étant numérique en informatique, il en va de même avec toutes les opérations que peut effectuer un processeur, que l'on nomme codes d'opération (opcodes).
Par exemple, pour un processeur x86-64, l'opération pour affecter le registre de 32 bits EAX est codée par l'octet B8 en hexadécimal, BB pour le registre EBX, B9 pour le registre ECX, et BA pour le registre EDX.
Le code d'opération et l'opérande pour affecter la valeur décimale 42 au registre EAX sont donc : B8 2A 00 00 00, pour le registre EBX : BB 2A 00 00 00, pour le registre ECX : B9 2A 00 00 00, et pour le registre EDX : BA 2A 00 00 00.