[SYS1] Systemes d’exploitation (7)

Assembleur x86

ISA (Instruction Set Architecture) :

Bytecode (32 bits)

OPcode rD rS1 rS2
OPcode rD immediat (imm)

Langage assembleur :

add r2, r3, r4
r2 <- r3 + r4
mov r3, $1 // r3 <- 1

Langage machine : Bytecode
Assembleur : Representation texte du bytecode

S.c .S bytecode (ELF .O)

Architectures

CISC moderne est implem (pour certains cas) avec un coeur RISC et un layer de traductiom

Delay Slot

jmp $abc
add r1, r2, r3

Sur RISC, le CPU execute les instructions 2 par 2 -> besoin d’un nop apres les JMP

jmp $abc
nop
add r1, r2, r3

Instructions

cc (ex: jcc) est un type de comparaison qui depend des flags de l’operation precedente

Certaines instructions sont du sucre et n’existent pas telles quelles dans le bytecode

Registres

if (a != 0)
  block A
else
  block B
    cmp $0, %rax
    jne A
      block A
    jmp.E
A:  block A
E:
mov $0, %rax
// %rax <- 0

mov: mnemonique
$0 et %rax: operandes
%xxx: registre
$xxx: immediat
xxx: addresse