1

2

Ce n'est pas tout à fait ce que tu veux, mais http://swox.com/doc/x86-timing.pdf est de bon conseils si tu veux écrire de l'assembleur performant pour x86. Mais ca suppose que tu le connaisses déjà.

3

Pourquoi as-tu besoin de coder en asm ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

4

5

À apprendre, ouais... Mais à utiliser, bof.
Enfin, j'imagine que c'est un choix réfléchi...
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

6

Comme assembleur, je conseille GNU as (dans le paquetage binutils).

Par défaut, il parle la syntaxe AT&T, que je conseille, elle ressemble beaucoup à celle du 68k, mais il comprend aussi la syntaxe Intel (opérandes à l'envers, "longueur" de l'instruction (b, w, l, q) spécifiée dans les opérandes, pas dans l'opcode), pour ça, il faut utiliser la directive .intel_syntax.

Pour un truc qui ressemble au 68kguide, le mieux que je connais est la documentation de NASM: http://web.mit.edu/nasm_v0.98/doc/nasm/html/nasmdocb.html. Attention, NASM utilise la syntaxe Intel (plus précisément, une syntaxe à leur sauce, mais proche de la syntaxe Intel), donc leur documentation aussi.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

7

pour la sortie console

sous linux peux utiliser l'appel système (~~trap) "write" ce qui t'évite carrément la liaison avec la libc.

un prog de mon prof de système illustre ça:
#
#   Ce programme imprime la valeur de ESP quand on est lance par le noyau
#
#   Interface du write :
#   4 --> EAX
#   fd --> EBX
# stdout correspond au fd 1
#   buffer --> ECX
#   nboct --> EDX
#   int $0x80
#
        .text
.globl _start

_start:
#   on traduit en ascii ESP dans esp_str
        mov     %esp,%eax
        mov     $esp_str, %ecx
        push    %ecx
        push    %eax
        call    hex2bin
        add     $8,%esp

#   on imprime msg
        mov     $4,%eax
        mov     $1,%ebx
        mov     $msg,%ecx
        mov     $16,%edx
        int     $0x80

#   on imprime esp_str
        mov     $4,%eax
        mov     $1,%ebx
        mov     $esp_str,%ecx
        mov     $9,%edx
        int     $0x80

#   appel a exit
        mov    $0xfc,%eax
        int    $0x80

        ret

        .data
msg:
        .string "Valeur de ESP : "

esp_str:
        .string "XXXXXXXX\n"

hex2bin.c:
char digit[16] = {
                   '0', '1', '2', '3',
                   '4', '5', '6', '7',
                   '8', '9', 'A', 'B',
                   'C', 'D', 'E', 'F'
                 };

void hex2bin(unsigned int n, char * s) {

int i;
unsigned int c;
s = s + 7;
  for (i = 1; i <= 8; i++) {
    c = n & 0xf;
    *s-- = digit[c];
    n = n >> 4;
  }
}

Makefile:
essai:  print_esp.o hex2bin.o
        ld -o print_esp print_esp.o hex2bin.o

print_esp.o : print_esp.s
        as -gstabs -o print_esp.o print_esp.s

hex2bin.o : hex2bin.c
        cc -c hex2bin.c

clean:
        rm *.o print_esp

le but était de montrer que la valeur de SP au démarrage d'un processus quand on est sous linux 2.6 (randmap)

tu en tireras certainement des trucs sympas smile

exemples d'autres appels systèmes: exit, open, close, read, fork, socket, etc... wink

8

Manuel du jeu d'instruction : ftp://download.intel.com/design/celeron/manuals/243191.htm
Guide d'optimisation : ftp://download.intel.com/design/celeron/manuals/242816.htm
Manuel pour faire du développement système : ftp://download.intel.com/design/celeron/manuals/243192.htm

C'est touffu, mais y'a tout ce qui concerne le processeur.

9